整数分类
1、题目内容
Description
按照下面方法对整数x进行分类:如果x是一个个位数,则x属于x类;否则将x的各位上的数码累加,得到一个新的x,依次迭代,可以得到x的所属类。比如说24,2+4=6,则24的类别数是6;39,3+9=12,1+2=3,则39的类别数是3。
输入
每行输入一个非负整数n,n≤10的500次方,n为0时结束。
输出
每行输出对应整数的分类数。
Sample Input
24
39
0
Sample Output
6
3
2、解题分析
在这个题目里,首先很多人遇到的难处就是n的可能取值太大,远远超出了计算机整数可存储的范围极限,这个时候,我们可以采取字符串数组存储的形式进行存储,将数字视作字符保存起来。再根据题目要求不断对数的各个数码进行累和,直到求出我们想要的结果。
3、参考代码
#include<stdio.h>
#include<string.h>
int digit(int x) //定义一个函数实时得到数字的位数
{
int i=0;
while(x)
{
x/=10;
i++;
}
return i;
}
int main()
{
char str[501];
int i,j,k,m,n;
while(scanf(" %s",str)!=EOF)
{
k=strlen(str);
if(k==1&&str[0]=='0') //当输入的是字符0时,意味着结束
{
break;
}
int sum=0;
for(i=0;i<k;i++) //求数码和
{
sum=sum+str[i]-'0';
}
while(digit(sum)!=1) //循环迭代找出整数分类数
{
int t=sum;
sum=0;
while(t)
{
sum=sum+t%10;
t/=10;
}
}
printf("%d\n",sum);
}
return 0;
}