解题思路:

用用户输入的数据取模17即可得知是否为17的倍数

注意事项:

1、由于输入的是大数据,即用普通的int,long等装不下,故可用字符数组的方式容纳此数

2、需要明白字符数组中的值转换为int数字类型的方法

即:char[0]='1',此处的‘1’属于字符类型,不可进行运算,但可把它转换成数字类型即可运算

转换方法:char[0]-'0',此处转换后的结果1则为数字类型

若要把数字类型转换成字符类型,

可用:int a=1,此处为数字类型的1

a+'0',此时转换后结果为‘1’,字符类型

3、在编译时需要调用头文件#include<bits/stdc++.h>,否则网页编译器报错


代码中for循环中的代码解析:

sum = (sum * 10 + a[i] - '0') % 17;

举个例子:

假设用户输入的数据为34;

则:sum=(0*10+‘3’-‘0’)%17=(0+3)%17 =3       此处sum起始值为0,用户输入的值为34,但在for循环中第一次录入的值为字符‘3’,利用字符转数字的方法转化成数字3(即:‘3’-‘0’)再取模17

进入第二次循环:

sum=(3*10+'4'-'0')%17=(30+4)%17=0


参考代码:

#include<bits/stdc++.h>

#include<iostream>

using namespace std;

int main() 

{

    char a[100];//定义字符型数组记录用户输入的数据

    while (cin >> a && a[0] != '0')//死循环,用户输入数据,但当用户输入为0时退出循环,即a[0],第一个输入的字符为'0'

    {

        int sum = 0;//用于记录总数

        for (int i = 0; i < strlen(a); i++)//遍历用户输入的字符数组

        {

            sum = (sum * 10 + a[i] - '0') % 17;//向上递增逐步求出用户输入的数据取模17的值(此处看不懂则看上述解释)

        }

        if (sum == 0)//是17的倍数

            cout << 1 << endl;

        else//不是17的倍数

            cout << 0 << endl;

    }

    return 0;

}



点赞(0)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论