解题思路
2的31次方约等于2乘以10的9次方,即十进制最多十位数
数位分解以后,就算是10个9的数位和也才90
所以第一步处理以后,就只剩两位数了,循环计算两位数就行 。
版本1
#include<cstdio>
#include<cstring>
int main(){
char str[35];
while(scanf("%s",str)!=EOF&&str[0] != '0'){
int len = strlen(str);
int sum = 0;
for(int i = 0;i < len;i++){
sum += str[i] - '0';
}
while(1){
if(sum < 10){
printf("%d\n",sum);
break;
}
else {
sum = sum/10 + sum%10;
}
}
}
return 0;
}
版本2
直接模拟
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>
#include <queue>
#include <cstdio>
#include <cctype>
#include <unordered_map>
#include <map>
using namespace std;
const int N = 105;
typedef pair<int, string> PII;
int main() {
string str;
while(cin>>str){
int res = 0;
for(auto c: str){
res += c - '0';
}
while(res > 10){
int ans = 0;
while(res){
ans += res%10;
res /= 10;
}
res = ans;
}
cout<<res<<endl;
}
return 0;
}