合抱之木,生于毫末;九層之臺,起于累土;千里之行,始于足下。💪🏻
一、題目描述 ??
習題4-4 特殊a串數列求和
給定兩個均不超過9的正整數a和n,要求編寫程序求a+aa+aaa+?+aa?a(n個a)之和。
輸入格式:
輸入在一行中給出不超過9的正整數a和n。
輸出格式:
在一行中按照“s = 對應的和”的格式輸出。
輸入樣例:
2 3
輸出樣例:
s = 246
二、解題思路 ??
代碼中的
getNum()
函數解析:👇🏻
以
a=2
為例:🦋
n=1
時:2
=2 * 10^0
;
n=2
時:22
=2 * 10^1 + 2 * 10^0
;
n=3
時:222
=2 * 10^2 + 2 * 10^1 + =2 * 10^0
;
。。。
n=n
時:n個2
=2 * 10^(n - 1) + ... + 2 * 10^2 + 2 * 10^1 + =2 * 10^0
三、代碼(C語言)??
#include <stdio.h> // 包含標準輸入輸出庫,用于使用scanf和printf等函數
#include <math.h> // 包含數學函數庫,用于使用pow函數// 定義一個遞歸函數,生成由數字a重復n次組成的數
int getNum(int n, int a) {// 如果n為1,直接返回a(例如a=2,n=1時返回2)// 否則,返回a乘以10的(n-1)次方,加上遞歸調用getNum(n-1, a)的結果return n == 1 ? a : a * pow(10, n - 1) + getNum(n - 1, a);
}int main() {int a, n; // 定義變量a和n,分別表示數字和重復次數scanf("%d %d", &a, &n); // 從用戶輸入中讀取a和n的值int sum = 0; // 定義變量sum,用于存儲累加結果,初始值為0// 使用for循環計算從1到n的所有由a重復i次組成的數的和for (int i = 1; i <= n; i++) {sum += getNum(i, a); // 調用getNum函數生成由a重復i次組成的數,并累加到sum中}// 輸出累加結果sumprintf("s = %d", sum);return 0; // 程序正常結束
}