解题思路:
用用户输入的数据取模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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复