[解题报告]Summing Digits
题目大意
题目原文:http://uva.onlinejudge.org/external/113/11332.pdf
背景:
对一个正整数 n, f(n) 表示 n 以十进制表示时所有位数的和。显而易见地,数列 n, f(n), f(f(n)), f(f(f(n))), ...一直重复下去最后会变成一个一位数的整数。这个一位数字以 g(n) 表示。
例如,若 n = 1234567892,则:
f(n) = 1+2+3+4+5+6+7+8+9+2 = 47
f(f(n)) = 4+7 = 11
f(f(f(n))) = 1+1 = 2
因此, g(1234567892) = 2。
intput
每笔测试数据一列。每列都有一个大不于2,000,000,000 的正整数 n。当 n = 0 时代表输入结束,不用输出 n = 0 这笔数据。请参考 Sample Input
output
每笔测试数据输出一列 g(n)。
Sample input
2 11 47 1234567892 0
Output for sample input
2 2 2 2
算法:
我这次尝试了下用函数,还有就是自己很不习惯用long首先想到的是double和float,但是%又只能是俩个整数所以自己要记住这点。还要以后的代码尽量用函数来表示,因为以后出去工作基本都是用函数,还有要加强习惯去写注释。这是道比较简单的题目具体就不说了。
代码:
这里附上我的代码,你可以去这里提交你的代码验证你的代码是否正确。
#include<stdio.h> int chang(long long n); int main(void) { long long n; while(scanf("%lld",&n)!=EOF) { if(n==0)break; printf("%d\n",chang(n)); } return 0; } int chang(long long n) { int num[10]; int sum=0,i,j; if(n<10) { sum=(int)n; return sum; } else { for(i=0;;i++) { for(j=0;;j++) { if(n<10) { sum+=n; break; } num[j]=n%10; sum+=num[j]; n=n/10; } if(sum<10)break; else { n=sum; sum=0; } } return sum; } }