合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻
一、题目描述 ⭐️
习题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; // 程序正常结束
}