计蒜客-1189-树根

2023-05-16

数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根。如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。

比如,对于 2424 来说,把 22 和 44 相加得到 66,由于 66 是一位数,因此 66 是 2424 的数根。再比如 3939,把 33 和 99 加起来得到 1212,由于 1212 不是一位数,因此还得把 11 和 22 加起来,最后得到 33,这是一个一位数,因此 33 是 3939 的数根。

输入格式
一个正整数(小于 10^{1000}10
1000
)。

输出格式
一个数字,即输入数字的数根。

输出时每行末尾的多余空格,不影响答案正确性

样例输入复制
24
样例输出复制
6

本题乍一看很简单,但是已看数据范围很恶心,尝试用long long ,只能过部分case,所以选择了大整数结构体,这样既可通过

//@authir:hairu,wu
//@from:ahut
#include<iostream>
using namespace std;

struct num{
	int a[10000];
	int len;
	num(){
		len=0;
	}
};

int f(num x){
	if(x.len==1) return x.a[0];
	else{
		num t;
		int tmp;
		for(int i=0;i<x.len;i++){
			tmp+=x.a[i]; 
		}
		while(tmp!=0){
			int r=tmp%10;
			tmp=tmp/10;
			t.a[t.len++]=r;
		}
		return f(t);
	}
}

num trans(string str){
	num a;
	int len=str.length();
	for(int i=len-1;i>=0;i--){
		a.a[a.len++]=str[i]-'0';
	}
	return a;
}

int main(){
	string str;
	cin>> str;
	num a=trans(str);
	cout<<f(a)<<endl;
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计蒜客-1189-树根 的相关文章

随机推荐