解题思路:
用用户输入的数据取模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 人评分
Tom数 (C语言代码)浏览:736 |
点我有惊喜!你懂得!浏览:1337 |
点我有惊喜!你懂得!浏览:1238 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:584 |
蓝桥杯历届试题-九宫重排 (C++代码)浏览:2783 |
简单的a+b (C语言代码)浏览:599 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:588 |
2005年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:575 |
输入输出格式练习 (C语言代码)浏览:850 |
输入输出格式练习 (C语言代码)浏览:752 |