7-38 數列求和-加強版(20 分)
給定某數字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的值。
輸入樣例:
1 3
輸出樣例:
123
這題剛剛接觸感覺並不是很好理解,先手動模仿一個看看
假設A=9 ,N=5
9 9 9 9 9
9 9 9 9
9 9 9
9 9
9
關鍵是可以把它們看成一列一列加,如果有進位則進位
其次因為題目要求100000個數字,這個肯定是需要用數組來存儲了,下面來看一下代碼
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<math.h> 4 #include <string.h> 5 /* 6 給定某數字A(1≤A≤9)以及非負整數N(0≤N≤100000),求數列之和S=A+AA+AAA+⋯+AA⋯A(N個A)。 7 例如A=1, N=3時,S=1+11+111=123。 8 輸入數字A與非負整數N。 9 輸出格式 10 11 */ 12 13 int main() 14 { 15 int p[100002] = {0}; 16 int a,n; 17 int i,j; 18 int t,fd=0; //中間轉換變量 ,之前進位的數 19 20 scanf("%d %d",&a,&n); 21 if ( n==0 ){ 22 printf("0\n"); 23 return 0; 24 } 25 j = 0; 26 for( i=n; i>0; i--,j++){ 27 t = i*a + fd; 28 fd = t/10; 29 p[j] = t%10; 30 } 31 if( fd!=0 ){ 32 printf("%d",fd); 33 } 34 for( i=j-1; i>=0; i--){ 35 printf("%d",p[i]); 36 } 37 return 0; 38 }