个人技术分享

题目描述

给定一个正整数 n,若 n 在十进制下的各位数字之和小于1010,则这个和是 n 的数根。否则,继续求这个和在十进制下的各位数字之和,直到结果小于1010为止,定义最后的结果为 n 的数根。

例如,999999 的数根为 99,因为 9+9+9=279+9+9=27,继续分解得 2+7=92+7=9。给定 n,请输出它的数根。注意,有一部分 n 非常大。

输入格式

单个整数,表示数字 n。

输出格式

单个整数:表示 n 的数根

数据范围
  • 对于 40% 的数据,1≤n<231;
  • 对于 80% 的数据,1≤n<263;
  • 对于 100% 的数据,1≤n<101000。
样例数据

输入:

99999999999

输出:

9

说明:

99=>18=>9

输入:

314159265358979323846264338328

输出:

7

题解:

本题关键点:大于10就循环切片求和,代码如下。

#include <iostream>
#include <string>
using namespace std;
int root(int x){
	int y=0;
	while(x>0){
		y+=x%10;
		x/=10;
	}
	return y;
}
int main(){
	string n;
	int ans;
	cin>>n;
	ans=0;
	for(int i=0;i<n.length();i++){
		ans+=n[i]-'0';
	}
	//循环切片 
	while(ans>9){
		ans=root(ans);
	}
	cout<<ans<<endl;
	return 0;
}