數列求和 加強版 PAT

2021-07-10 07:17:51 字數 1892 閱讀 5905

原題如下:

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