当前位置: 代码迷 >> 综合 >> 循环结构:求Sn=a+aa+aaa+…+aaa…a的值,其中a为一个数字。例如,2+22+222,此时a=2,n=3, n由键盘输入。——[C语言]入门基础编程 1018
  详细解决方案

循环结构:求Sn=a+aa+aaa+…+aaa…a的值,其中a为一个数字。例如,2+22+222,此时a=2,n=3, n由键盘输入。——[C语言]入门基础编程 1018

热度:27   发布时间:2023-12-06 04:49:10.0

分析问题:

这是一道循环结构的题,要求我们计算前n项和,本质上是需要我们计算出a,aa,aaa,aaaa…这些数字。
这些数字有很多规律,循环结构正是需要用规律解题,所以你使用了什么规律,就决定了编写程序的难易。

以2+22+222+2222…为例:
我刚开始想的时候,无非认为应该这样求第n项:2*(10 ^ 0) + 2*(10 ^ 1) + 2 * (10 ^ 2)…我把每一位的2拆开,就把计算第n项变成了计算2 + 22 + 222…的值,看起来似乎没有问题,可我还是没有写出来(以后再试试)。
上面的方法是单独观察每一项。如果这种方法不行,可以试试观察两项之间的规律所在。比如前两项,2和22,22 = 20 + 2;第2项和第3项,222 = 220 + 2 = 22 ^ 10 + 2;渐渐的,可以发现前一项乘10,再加上a就能得到下一项了。

错误代码:

到这里还没完,要把代码正确写出才算真正解决问题。在这其中又会发现许多问题:

#define _CRT_SECURE_NO_WARNINGS 1int main()
{
    int Sn = 0;int a = 0;int n = 0;scanf("%d %d", &a, &n);int i = 0;//循环的临时变量for (i = 1; i <= n; i++){
    a = a + 2;Sn = Sn + a;a = a * 10;}printf("Sn=%d", Sn);return 0;
}

在这里面的代码中,如果只看到了题目中的"2,22,222…",直接把2套入公式,虽然也能得到答案,如果换一个数字,程序就不再适用,并且上面scanf输入的数字也作废了。

修改后正确代码:

程序需要兼容任何一种可能性,因此需要把for循环中的数字"2"替换为真正的"a",同时也要修改for循环内的代码块。

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>int main()
{
    int Sn = 0;//前n项和int p = 0;//把第n项存进去int a = 0;//想要输入的数字int n = 0;//需要计算前几项scanf("%d%d", &a, &n);int i = 0;//循环的临时变量for (i = 1; i <= n; i++){
    p += a;//第n项存进来Sn += p;//用于计算前n项和a = a * 10;//给a乘10,再与循环中的第一项配合,从而计算出第n项}printf("Sn=%d", Sn);return 0;
}

实际上还有其他的方法,想出了方法尽量付诸实践,把代码块写出来,报错再修复,我认为这才能真正提升。

如果有其他方法欢迎评论,互相学习!

  相关解决方案