7-38 數列求和-加強版
阿新 • • 發佈:2021-01-26
技術標籤:錯題集
給定某數字A(1≤A≤9)以及非負整數N(0≤N≤100000),求數列之和S=A+AA+AAA+⋯+AA⋯A(N個A)。例如A=1, N=3時,S=1+11+111=123。
輸入格式:
輸入數字A與非負整數N。
輸出格式:
輸出其N項數列之和S的值。
思路:
- 大於整型,故使用陣列
- 找出每一位數的規律
- (eg: 222 + 22 + 2=246 6=23 4=22 2=21 每一位為a(n-i) )
- 利用加法法則進位(不過是個位在前,高位在後) (腦補豎式過程)
#include<stdio.h>
#include<math.h>
#include<string.h>
int main(void)
{
int i, n, sum = 0, a;
int ary[100001] = { 0 };
scanf_s("%d %d", &a, &n);
if (a == 1 && n == 0) { //最小a和n另加討論
printf("%d", 0);
return 0;
}
for (i = 0; i < n; i++) {
ary[i] = a * (n - i); //規律:每一位數== a*(n-i)
}
for (i = 0; i < n; i++) {
if (ary[i] > 9) { //>9說明需要進位
ary[i + 1] += ary[i] / 10; //前進一位
ary[i] %= 10; //取餘使其<10
if (i + 1 >= n) n++; //若前進位數>n, 就加一位以便下面輸出.
}
}
for (i = n - 1; i >= 0; i--) { //i從n-1開始迴圈到0(最高位到個位)
printf("%d", ary[i]);
}
return 0;
}