本文主要是介绍上海计算机学会2020年7月月赛C++丙组T3数根,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
给定一个正整数 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;
}
这篇关于上海计算机学会2020年7月月赛C++丙组T3数根的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!