解题思路:问题关键是要能够接收最大101位的数字,long long 型数值也无法容纳,只能先以字符串形式接收,再转化成按位存储的数字数组进行按位计算。

注意事项:

参考代码:

#include <stdio.h>
#include <string.h>

void fuzhi(char a[102], int b[102], int k);
void jianfa(int b[102], int k);
int chufa(int b[102], int k);

int main()
{
    char a[10][102];
    int b[10][102] = { 0 }, c[10] = { 0 };//字符数组a接收,b用来转换处理,c用来记录位数
    int k;
    for (k = 0;k < 10;k++)
    {
        scanf("%s", a[k]);
        if (a[k][0] == '0') break;
    }
    for (int i = 0; i < k;i++)
    {
        c[i] = strlen(a[i]);
        fuzhi(a[i], b[i], c[i]);
        jianfa(b[i], c[i]);
        c[i]--;//执行过减法后,数值会减少一位
        printf("%d\n", chufa(b[i], c[i]));
    }
    return 0;
}

void fuzhi(char a[102], int b[102], int k)//将字符数组转为数字数组
{
    for (int i = 0;i < k;i++)
        b[i] = a[i] - '0';
}

void jianfa(int b[102], int k)//执行规则中的减法操作,最后个位容纳两位数、负数不会影响到后续计算
{
    b[k - 2] = b[k - 2] - 5 * b[k - 1];
    b[k - 1] = 0;
}

int chufa(int b[102], int k)//执行规则中的除法判断,不会受到某一单元是两位数或者负数的影响
{
    int i, temp = 0;
    for (i = 0;i < k;i++)//按位计算
    {
        int e = temp * 10 + b[i];
        temp = e % 17;
    }
    if (temp == 0)
        return 1;
    else
        return 0;
}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论