缩位求和
一、题目内容
题目描述
在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确。比如:248 * 15 = 3720,把乘数和被乘数分别逐位求和,如果是多位数再逐位求和,直到是1位数,得
2 + 4 + 8 = 14 ==> 1 + 4 = 5;
1 + 5 = 6
5 * 6
而结果逐位求和为 3,5 * 6 的结果逐位求和与3符合,说明正确的可能性很大!(不能排除错误)请你写一个计算机程序,对给定的字符串逐位求和。
输入
输入为一个由数字组成的串,表示n位数(n<1000);
输出
输出为一位数,表示反复逐位求和的结果。
样例输入
35379
样例输出
9
二、思路分析
题目比较好理解,就是逐位求和,最终输出一位数。用字符串输入应该比较好处理。方法二就是正常通过循环,/,%的操作实现的,稍微复杂一点。方法一利用C++STL的一个函数,将数值再次转换为字符串,从而更新字符串的内容。
string to_string(numberic_value);
这个函数是在C++11标准中定义的,是以
using namespace std; 是一条语句,告诉编译器使用名为std的命名空间,如果我们不编写此语句,则需要对所有函数、对象使用std :: 。
三、代码实现
方法一:
#includeusing namespace std; int main() { string s; cin >> s; int sum = 0; while (s.length() != 1) { //循环终止条件,字符串s只剩一位 sum = 0; //每次循环前置零 for (int i = 0; i < s.length(); ++i) { sum += (s[i] - '0'); //char转int } s = std::to_string(sum); //将字符串s更新s } cout << s << endl; return 0; }
方法二:
#includeusing namespace std; int main() { string s; cin >> s; int sum = 0; for (int i = 0; i < s.length(); i++) { //第一次逐位求和 sum += (s[i] - '0'); //char转int } int t = sum; while (t >= 10) { //再次逐位求和,直到为一位数 t = 0; while (sum) { t += sum % 10; sum /= 10; } sum = t; } cout << t << endl; return 0; }
加油哦! 如有错误和需要改进完善之处,欢迎大家纠正指教。



