题目易错解析
如题用C语言求特殊字符串a,s=a+aa+aaa+aaaa+aaaa+.........(n个)a的和。这里第一次写到这个题目会让人误以为是a+a*a+a*a*a.....的和,其实不是的。其实是s=a+a*10+a+a*10*10+a......。什么意思呢,举个例子,假设a被赋值为2则s=2+22+222+2222.......依次类推。
解题思路
那要解这类题目,首先不难想到需要用到for循环,那么再用for 循环之前先找找这些数字的规律,我们还是用2举例子,你就会发现22可以拆分为2*10的一次方加2,222可以拆分为2*10的2次方加上22,那么2就可以看作是2*10的0次方加上0,那么规律就出来了,就是所谓的2*10的次方加上前面的数字。这样我们循环体的内容就可以确定了。
接下来我们来写这个程序,1,首先需要定义需要的变量,我们设它为整形
2,运用scanf函数让用户进行输入。
3,设置循环条件,循环体内容。
4,用printf函数输出求和结果。
注意事项:本题需要用到数学指数函数,因此需要报一个<math.h>的头文件。
敲代码
完整代码如下。楼主是一个新人,请多担待,有错误在评论区里指出来,我会认真纠正,欢迎大家讨论。
#include<stdio.h>
#include<math.h> /*报数学头文件*/
int main()
{
int j = 0, k = 0, s = 0, s1 = 0,s2=0; /*定义需要的变量*/
scanf(" %d %d", &j, &k); /*输入数值*/
for (int i = 0; i < k; i++)
{
s = j * pow(10, i); /*pow是指数函数,用法pow(底数,指数)*/
s1 += s; /*求出当前循环次数的数*/
s2 += s1; /*求出当前循环次数的数与上一次数的和*/
}
printf("s=%d", s2);
return 0;
}