解题思路:
用用户输入的数据取模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语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:1019 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:703 |
C语言训练-最大数问题 (C语言代码)浏览:648 |
不容易系列2 (C语言代码)浏览:641 |
用筛法求之N内的素数。 (C语言代码)浏览:1386 |
字符串比较 (C语言代码)答案错误????浏览:641 |
用筛法求之N内的素数。 (C++代码)浏览:754 |
C二级辅导-公约公倍 (C语言代码)浏览:537 |
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:331 |
敲七 (C++代码)浏览:1119 |