1. 程式人生 > 其它 >7-38 數列求和-加強版

7-38 數列求和-加強版

技術標籤:錯題集

給定某數字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; }