解题思路:
本题输入的数的范围是正整数1到pow(2,32),如此大的数,一般的数据类型(int long float double)还存不下。
所以用string字符串类型来保存输入的数。(C语言可以使用char *)
Tom数就是自身各位数字之和。
求字符串的各位数字之和可以倒序加,把最后一位字符转换成数字,一位一位的向前推进,结果放在sum变量中,不用考虑进位,非常简单。
注意事项:
注意OJ系统的数据测试是一组一组的测试,不是说让你把所有的数据全部输入,再把数据全部输出。
参考代码:
#include <iostream> #include <string> using namespace std; int main() { string a; int aa,sum; while(cin>>a) { sum=0; int lena=a.size(); //字符串的长度 while(lena>0) { aa=a[lena-1]-'0'; //转换成数字 sum+=aa; //累加 lena--; //向前推进 } cout<<sum<<endl; } return 0; }
测试环境:
Windows 10 China Huawei Source Insight 4.0
Linux Debain Ubuntu/Kali g++
程序测试:
0.0分
11 人评分
#include<stdio.h> int main() { int i; int sum=0; int n,n1=0,n2=0,n3=0,n4=0,n5=0,n6=0,n7=0,n8=0,n9=0; scanf("%d",&n); while(n%10!=0) { n=n-1; n1++; } while(n%100!=0) { n=n-10; n2++; } while(n%1000!=0) { n=n-100; n3++; } while(n%10000!=0) { n=n-1000; n4++; } while(n%100000!=0) { n=n-10000; n5++; } while(n%1000000!=0) { n=n-100000; n6++; } while(n%10000000!=0) { n=n-1000000; n7++; } while(n%100000000!=0) { n=n-10000000; n8++; } while(n%1000000000!=0) { n=n-100000000; n9++; } sum=n1+n2+n3+n4+n5+n6+n7+n8+n9; printf("%d",sum); ret
怎么样算一组一组测试?我的代码提交说输出超限,可是看题干的输入也没有终止条件呀 #include<stdio.h> int main() { long long n,sum; while(scanf("%lld",&n)) {sum=0; while(n!=0) { sum=sum+n%10; n=n/10; } printf("%lld\n",sum); } return 0; }
C语言训练-求矩阵的两对角线上的元素之和 (C++代码)浏览:845 |
C语言程序设计教程(第三版)课后习题9.3 (C语言代码)浏览:602 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:746 |
母牛的故事 (C语言代码)浏览:1412 |
C语言训练-排序问题<1> (C语言代码)浏览:1411 |
C语言训练-斐波纳契数列 (C语言代码)浏览:3015 |
简单的a+b (C语言代码)浏览:583 |
C语言程序设计教程(第三版)课后习题8.9 (Java代码)浏览:1413 |
校门外的树 (C语言代码)浏览:988 |
C语言训练-尼科彻斯定理 (C语言代码)浏览:509 |