1 条题解
-
0
解题思路:
将字符串中各位数字相加得到一个和,若这个和大于等于 10,则继续将和的各位数字相加,直到和为一位数,这其实就是在求该数字的数字根,利用了九余定理来简化这个过程。
分析:
九余定理:一个数除以 9 的余数等于这个数各位数字之和除以 9 的余数。数字根是指将一个数的各位数字相加,若结果不是一位数,则继续将各位数字相加,直到得到一个一位数。实际上,一个数的数字根就等于这个数对 9 取余的结果(当这个数不是 9 的倍数时),当这个数是 9 的倍数时,数字根为 9。
例如,对于数字 28,各位数字之和为 2+8=10,10 不是一位数,继续计算 1+0=1,所以 28 的数字根是 1;同时 28mod9=1。再如 9 的倍数 18,各位数字之和为 1+8=9,数字根是 9,18mod9=0,但数字根规定为 9。
实现步骤:
1.输入处理:使用 scanf 函数读取数字字符串,若字符串以 '0' 开头则结束程序。
2.求和计算:计算输入字符串所代表数字的各位数字之和。
3.迭代化简:若各位数字之和大于等于 10,则不断将和的各位数字相加,直到和为一位数。
4.输出结果:输出最终得到的一位数结果。
c++实现:
#include<stdio.h> #include<string.h> int main() { int i,sum,b,n; char a[2000]; while(1){ scanf("%s",a); if(strcmp(a,"0")==0) break; n=strlen(a); sum=0; for(i=0;i<n;i++) sum+=a[i]-'0'; b=sum%9; if(b==0) b=9; printf("%d\n",b); } return 0; }
- 1
信息
- ID
- 520
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 11
- 已通过
- 1
- 上传者