给定两个均不超过9的正整数a和n,要求编写函数求a+aa+aaa++⋯+aa⋯a(n个a)之和。
函数接口定义
int fn( int a, int n );
int SumA( int a, int n );
其中函数fn须返回的是n个a组成的数字;SumA返回要求的和。
裁判测试程序样例
#include <stdio.h>
int fn( int a, int n );
int SumA( int a, int n );
int main()
{
int a, n;
scanf("%d %d", &a, &n);
printf("fn(%d, %d) = %d\n", a, n, fn(a,n));
printf("s = %d\n", SumA(a,n));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例
2 3
输出样例
fn(2, 3) = 222
s = 246
解析
通过观察,发现每一项等于前面一项乘以10加上第一项。即
fn(a,n)=fn(a,n-1)*10+a;
fn(a,1)=a;
那么可以写一个递归函数解决此问题。
求和函数,通过一个循环来获得每一项的值,并且返回这和和。
参考代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int fn(int a, int n);
/*fn须返回的是n个a组成的数字*/
int SumA(int a, int n);
/*SumA返回要求的和*/
int main()
{
int a, n;
scanf("%d %d", &a, &n);
printf("fn(%d, %d) = %d\n", a, n, fn(a, n));
printf("s = %d\n", SumA(a, n));
return 0;
}
/* 你的代码将被嵌在这里 */
int fn(int a, int n)
{
int r;
if (n == 1)
r = a;
else {
r = fn(a, n - 1) * 10 + a;
}
return r;
}
int SumA(int a, int n)
{
int sum=0,i;
for (i = 1; i <= n ; i++) {
sum += fn(a, i);
}
return sum;
}