题目
本题是谭浩强《c语言程序设计》第五章第五题
题目:求Sn=a+aa+aaa+…+n个a的值。其中a是一个数字,n表示a的位数n由键盘输入。
提示:以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。
一、解题思路
思路:
1.n是总位数,例如n=5,a=2时,算的是S=2+22+222+2222+22222
2.给每一项进行拆分,看一下能否发现其中的规律。第一项:2=a,第二项:22=a10+前一项,第三项:222=a100+前一项
3从而得出公式:c=a*10^(0-n)+c;求Sn的公式: s=s+c;
4.输出s即可。
二、代码部分
1.引入库
代码如下(示例):
#include <stdio.h>
#include <math.h>
2.主函数部分
代码如下(示例):
int main() {
int a, n;
int s = 0, c = 0;
int i,j;
printf("hello,wold");
scanf("%d%d", &a, &n);
for (i = 0;i < n; i++)
{
j = pow(10, i);
c += a *j ;
s += c;
}
printf("%d", s);
return 0;
}
执行结果
输入:2,5
输出:24690
3.附上另一种代码实现方式:
代码如下(示例):
#include<stdio.h>
int main() {
int i;
int c = 1;
double s = 0;
for (i = 1; i <= 20; i++)
c = c * i;
s = s + c;
printf("%lf", s);
return 0;
}
注意:此处有一个困惑,s的类型范围接收不了这么大的数,运行结果可能不一致,但代码算法是正确的,如果把数改小一些,在范围内输出正确,这一问题有待改正,