原題如下:
給定某數字a
a(1\le a\le 91≤
a≤9)以及非負整數n
n(0\le n\le 1000000≤
n≤10
0000
),求數列之和s = a + aa + aaa + \cdots + aa\cdots as=
a+aa
+aaa
+⋯+a
a⋯a(n
n個aa)。例如a=1a=
1, n=3n=
3時,s = 1 + 11 + 111 = 123s=
1+11
+111
=123
。輸入數字a
a與非負整數nn。
輸出其n
n項數列之和s
s的值。
1 3
123
由題可知,該題設計到大數相加的問題,因此需要用陣列的形式進行解答,第一印象是用迴圈進行操作,將第乙個值(n個a)賦值給output,把第二個值(n-1個a)賦值給sum,然後進行相加操作,把結果存入output中,依此類推,直到加上最後乙個數為止。**如下:
#include #define max 100002
int main()
, sum[max] = ;
scanf("%d%d", &a, &n);
m = n;
*** = 0;
if (n == 0)
printf("0\n");
else if (n == 1)
printf("%d\n", a);
else
for (j = i; j < m; j++)
while (carry)
for (i = 0; i < n - 1; i++)
sum[i] = 0;
n--;
if (n == 1)
break;
} if (*** == 1)
else
}return 0;
}
執行結果中出現了執行超時現象,在vs2015上執行了一下n=100000的情況,結果可想而知,根本就停在那裡不動彈了,因此需要採用其他方法解答,將這n個數從上往下排開可以看到output[0]存入的結果其實就是n個a相加再%10就可以了,output[1]存入的結果是n-1個a相加再加上進製carry然後%10,依此類推,因此可以將**更改為如下形式:
#include #define max 100002
int main()
; scanf("%d%d", &a, &n);
*** = 0;
if (n == 0)
printf("0\n");
else if (n == 1)
printf("%d\n", a);
else
while (carry)
if (*** == 1)
else
}return 0;
}
這樣就可以得到正確解答。
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的值。1 3123最近這些天一直在玩,沒怎麼寫 看到這題直覺就是像以前一樣開闢字元陣列,昨...
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的值。如果這道題按數學中的四則運算去直接計算結果,該資料會超出long long 的範圍,...
數列求和 加強版 陣列
問題描述 給定某數字a 1 a 9 以及非負整數 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錯誤 include ...