计蒜客-1189-树根

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

比如,对于 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;
}
发布了69 篇原创文章 · 获赞 3 · 访问量 1078
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览