1055 整数分类

整数分类

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;
}

哪天,你会明白,你对我多重要~

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42987451/article/details/82940448