CCF 1035. 数根

1035. 数根 (Standard IO)

时间限制: 1000 ms  空间限制: 262144 KB  具体限制  

题目描述

数根是这样定义的:对于一个正整数n,将它的各个数位上的数字相加得到一个新数,如果这个数是一位数,我们就称之为n的数根,否则重复处理直到它成为一个一位数。
例如,n=34,3+4=7,7是一位数,所以7是34的数根。
再如,n=345,3+4+5=12,1+2=3,3是一位数,所以3是345的数根。
对于输入数字n,编程计算它的数根。
 

输入

输入正整数n。

输出

输出n的数根。

样例输入

345

样例输出

3

数据范围限制

1<=n<2^31

-------------------------------------------------------------------------

问题分析

这是一个层层递进的问题,所以使用了递归的方法,设定一个递归边界 if(strlen(b) == 1),就是当字符串的长度为1时,结束。

程序中使用了sprintf函数,把int转换成char数组来运算,因为如果直接用int去计算各个位上的和的话,需要用到 / 和 % ,会比较麻烦,转换成字符运算的话,相对比较简单。

程序代码

#include 
#include 
#include 
using namespace std;
int getShuGeng(char* b);

char a[20];
int k;

int main()
{
	int n;
	cin >> n;
	sprintf(a,"%d",n); //一开始使用itoa(n,a,10);在dev是没有问题的,但是放到oj就报错
	getShuGeng(a);
	cout << k;
  return 0;
}

int getShuGeng(char* b)
{
	k = b[0]- '0';
	if(strlen(b) == 1)
		return b[0];
	for(int i=1;i

 

你可能感兴趣的:(CCF,OJ题解)