计算机考研复试上机题 —— 数字阶梯求和 (哈尔滨工业大学)
思路:
1. 对于C语言中,即便 long 型也存放不了100个9,所以不能单纯通过暴力计算;
2. 采用数组模拟数据,数组每个空间存放计算结果的一位数据;
3. 通过数据从最低位到最高位的每位加法操作,利用加法步骤计算得到最终结果;
4. 一个个数相加过于幸苦,可以将所有的相同位一次性相加,比如所有个位相加,对10取余数即是个位的结果,再依次类推;
C++代码:
1 #include<iostream>
2
3 using namespace std;
4
5 //开辟全局数组存放结果
6 int result[200];
7
8 void solve() {
9 //cat:进位(初始为0); mod:余数
10 int k, a, n, cat = 0, mod;
11 cin>> a>> n;
12 //从最低位开始累加求解
13 for(k=0; k<n; k++) {
14 //如1 10, 拥有个位的数是10个, 拥有十位的数有9个, 类推
15 cat = (n-k)*a + cat;
16 //一次可以确定一个位的最终数据
17 mod = cat%10;
18 //对10取整就是进位
19 cat /= 10;
20 //存储当前位确定数字
21 result[k] = mod;
22 }
23 //若进位未空, 则处理剩余进位
24 while(cat) {
25 //同上述操作
26
27 mod = cat%10;
28 cat /= 10;
29 result[k++] = mod;
30 }
31 //逆序打印计算结果
32 for(int i=k-1; i>=0; i--) {
33 cout<< result[i];
34 }
35 cout<< endl;
36 }
37
38 int main() {
39 solve();
40
41 return 0;
42 }