1. 程式人生 > 實用技巧 >求Sn=a+aa+aaa+...+aa+⋯+an個a 之值,其中a是一個數字,n表示a的位數,n由鍵盤輸入。例如: 2+22+222+2222+22222 (此時n=5)

求Sn=a+aa+aaa+...+aa+⋯+an個a 之值,其中a是一個數字,n表示a的位數,n由鍵盤輸入。例如: 2+22+222+2222+22222 (此時n=5)

\(S_n\)=a+aa+aaa+...+\(\overbrace{aa+\dots+a}^{n個a}\) 之值,其中a是一個數字,n表示a的位數,n由鍵盤輸入。例如:

2+22+222+2222+22222 (此時n=5)

答案解析:

該題目可以將數字拆分為 a * 10^n + 前一個數字,例如:

2 = 2 * 10^0 + 0 : 預設2的前一個數字為0,也就是沒有任何值

22 = 2 * 10^1 + 2 : 22的前一個數字為2

222 = 2*10^2 + 22 :222的前一個數字為22

以此類推...

所以,在每次迴圈的時候,需要儲存下,上一次結果的值,方便下一次計算

還需要使用到C庫當中使用的pow函式,來計算某個數的n次方,我們在該題目當中使用的是10的n次方,n隨著迴圈的次數,以此遞增。

程式碼示例:

#include <stdio.h>
#include <math.h>

int main()
{
	//n為a的個數
	int n;
	double a, prev_sum = 0.0, total_sum = 0.0;
	printf("請輸入a的值以及n的值: ");
	scanf("%lf %d", &a, &n);
	//迴圈n次求總和
	for (int i = 0; i < n; i++)
	{
		prev_sum += a * pow(10, i); 
		total_sum += prev_sum;
	}
	printf("總和為:%lf\n", total_sum);
	return 0;
}

執行截圖: