解题思路:将长整数以字符串形式处理,大概思路就是将字符串最后一位乘5消去,一直递减到只剩三位数再判断是否是17的倍数。

注意事项:

参考代码:

#include <iostream>

using namespace std;

int main()

{

    int i, j, k[10], t = 0,m1,m2,m3;

    for (i = 0; i < 10; i++)

        k[i] = -1;

    char x[10][200]={};

    for (i = 0; i < 10; i++)

    {

        

        

            cin.getline(x[i],200);

            for (j = 0; j < 200; j++)

            {

                if(x[i][j]>=48&&x[i][j]<=57)

                k[i]++;

            }

         

        if (x[i][0] == 48)

            break;

        t++;

        

    }

    for (i = 0; i < t; i++)

    for (j = k[i]; j > 2; j--)//这个循环就是一位一位的消到只剩三位数

    {

        m3 = ((x[i][j - 3] - 48) * 100 + (x[i][j - 2] - 48) * 10 + x[i][j - 1] - 48 - (x[i][j]-  48) * 5) / 100 + 48;

        m2 = ((x[i][j - 3] - 48) * 100 + (x[i][j - 2] - 48) * 10 + x[i][j - 1] - 48 - (x[i][j] - 48) * 5) %100/10 + 48;

        m1 = ((x[i][j - 3] - 48) * 100 + (x[i][j - 2] - 48) * 10 + x[i][j - 1] - 48 - (x[i][j] - 48) * 5) %10 + 48;

        x[i][j - 1] = m1;

        x[i][j - 2] = m2;

        x[i][j - 3] = m3;

    }

    for (i = 0; i < t; i++)

    {

        if (k[i] == 1 && (10 * (x[i][0] - 48) + x[i][1] - 48) % 17 == 0)

        cout << '1' << endl;

        else if ((100 * (x[i][0] - 48) + 10 * (x[i][1] - 48) + x[i][2] - 48) % 17 == 0)

            cout << "1" << endl;

        else

            cout << "0" << endl;

    }

       

    return 0;

}


点赞(0)
 

0.0分

1 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论