计算机考研复试上机题 —— 数字阶梯求和 (哈尔滨工业大学)

 

思路:

  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         cat = (n-k)*a + cat;
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 }

猜你喜欢

转载自www.cnblogs.com/Lunix-touch/p/12299554.html