Advertisement

上海计算机学会2020年7月月赛C++丙组T3数根

阅读量:

这个问题要求计算一个正整数 n 的数根。数根是通过不断将一个数的各位数字相加,直到得到一个小于10的结果为止。
方法思路
读取输入:由于 n 可能非常大(超过 64 位整数范围),我们使用字符串来读取输入。
计算各位之和:将字符串中的每个字符转换为整数并累加。
判断结果:如果结果小于10,则直接输出;否则重复步骤2直到结果小于10。
解决代码
cpp #include <bits/stdc++.h> using namespace std; int main() { string s; cin >> s; int sum = 0; for (char c : s) { sum += c - '0'; } while (sum >= 10) { int new_sum = 0; while (sum > 0) { new_sum += sum % 10; sum /= 10; } sum = new_sum; } cout << sum << endl; return 0; }
输出说明
该程序会输出给定正整数 n 的最终数值根(即经过多次各位数字相加后的结果)。

数根

内存限制: 256 Mb时间限制: 1000 ms

题目描述

设定一个正整数值n。计算n的十进制各位数字之和S₁。如果S₁小于10,则S₁即为n的数根;当S₁≥10时,则反复计算上述步骤直至得到一个满足Sᵢ<10的结果。最后确定所得结果作为n的数根。

比如来说吧,在这里我们可以计算出数字的根比如说对于数字...我们可以通过各位数字相加之和的方法来求解其数根具体步骤如下首先将该整数拆分成各个位上的数字然后将这些数字相加得到一个中间和接着再将这个中间和的各位数字再次相加直到最终得到一个单一的数字这就是所求的数根值需要注意的是其中一部分数值n特别庞大这可能会对计算造成一定挑战

输入格式

单个整数,表示数字 n。

输出格式

单个整数:表示 n 的数根

数据范围
  • 对于 40% 的数据,1≤n<2^31;
  • 对于 80% 的数据,1≤n<2^63;
  • 对于 100% 的数据,1≤n<10^1000。
样例数据

输入:
99999999999
输出:
9
说明:
99=>18=>9
输入:
314159265358979323846264338328
输出:
7

解析:由于 n比较大,超过了long long 的数据范围,所以要用字符串输入;

然后循环计算各位的和。

处理范围为整数类型的数值时,则可采用循环结构对各位数字进行累加运算。具体而言,在每次累加过程中若得到的结果值大于或等于10,则需继续对所得结果进行同样的操作直至满足特定终止条件。

复制代码
 #include <bits/stdc++.h>

    
 using namespace std;
    
 string s;
    
 int main() {
    
     cin >> s;
    
     int n = 0;
    
     for (int i = 0; i < s.length(); i++) {
    
     n += s[i] - '0';
    
     }
    
     while (n >= 10) {
    
     int x = 0;
    
     while (n > 0) {
    
         x += n % 10;
    
         n /= 10;
    
     }
    
     n = x;
    
     }
    
     cout << n << endl;
    
     return 0;
    
 }

全部评论 (0)

还没有任何评论哟~