题目描述
在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确。
比如:248×15=3720
把乘数和被乘数分别逐位求和,如果是多位数再逐位求和,直到是 1 位数,得
2 + 4 + 8 = 14 ==> 1 + 4 = 5;
1 + 5 = 6
5 * 6
而结果逐位求和为 3
5∗6 的结果逐位求和与 3 符合,说明正确的可能性很大!!(不能排除错误)
请你写一个计算机程序,对给定的字符串逐位求和。
输入格式
一个由数字组成的串,表示 n 位数。
输出格式
一位数,表示反复逐位求和的结果。
数据范围
1≤n≤1000
输入样例1:
35379
输出样例1:
9
输入样例2:
7583676109608471656473500295825
输出样例2:
1
算法1
(字符串求解) $O(n)$
1.首先看题目到了1000位的数字,先来个string记录
2.接下来要看如何判断结束 size()==1就可以了
3.接下来我们每次循环如何生成,先求和如何再相加就好了,对了别忘了reverse
时间复杂度
参考文献
C++ 代码
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
string name;
bool f(string name)
{
return name.size()==1;
}
string zhuan(string name)
{
int res=0;
for(int i=0;i<name.size();++i)
{
res+=(name[i]-'0');
}
string ans="";
while(res)
{
ans=ans+(char)(res%10+'0');
res/=10;
}
reverse(ans.begin(),ans.end());
return ans;
}
int main()
{
cin>>name;
while(1)
{
name=zhuan(name);
if(f(name)) break;
}
cout<<name;
return 0;
}