1.题目描述
在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确。
比如:248×15=3720248×15=3720
把乘数和被乘数分别逐位求和,如果是多位数再逐位求和,直到是 1 位数,得
2+4+8=14==>1+4=5
1+5=6
5×6
而结果逐位求和为 3。
5×6 的结果逐位求和与 3 符合,说明正确的可能性很大!!(不能排除错误)
请你写一个计算机程序,对给定的字符串逐位求和。
输入描述
输入描述
输入为一个由数字组成的串,表示 𝑛 (𝑛<1000)位数;
输出描述
输出为一位数,表示反复逐位求和的结果。
输入输出样例
示例
输入
35379
输出
9
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
2.代码
#include <iostream>
#include<string>
using namespace std;
int main()
{string s;getline(cin,s);string t=s;while(t.length()!=1){int sum=0;for(int i=0;i<t.length();i++){sum+=t[i]-'0';}t=to_string(sum);}
cout<<t<<endl;return 0;
}
3.代码解析
输入部分
string s;
getline(cin, s);
-
使用
getline
从标准输入读取一行字符串,存储到变量s
中。这允许输入包含空格的字符串,但在这个场景下,输入应该是一个纯数字字符串。
初始化
string t = s;
-
将输入的字符串
s
赋值给变量t
,用于后续处理。
主循环
while (t.length() != 1) {int sum = 0;for (int i = 0; i < t.length(); i++) {sum += t[i] - '0';}t = to_string(sum);
}
-
循环条件:当
t
的长度不为1时,继续循环。 -
计算数字和:
-
初始化
sum
为0。 -
遍历字符串
t
的每个字符,将每个字符转换为对应的整数值(通过t[i] - '0'
),并累加到sum
中。
-
-
更新字符串:
-
将
sum
转换为字符串,赋值给t
,以便在下一次循环中继续处理。
-
输出结果
cout << t << endl;
-
当
t
的长度为1时,循环结束,输出最终的字符串t
。