当输入 2 3 时,程序会计算并输出 $2 + 22 + 222 = 246

当输入 2 3 时,程序会计算并输出 2 + 22 + 222 = 246
为什么不能实现

#include 

int main()
{
    int a, n, s = 0;
    scanf("%d %d", &a, &n);
    int i, j;
    for (i = 1; i <= n; i++)
    {
        s = s + a;
        a = a * 10;
    }
    printf("%d", s);
    return 0;
}

你把for循环的a打印结果输出一下就知道了

//for循环
i =  1 s = 2 a = 20
i = 2 s = 22 a = 200
i=3 s = 222 a = 2000

这样吧!

#include <stdio.h>

int main()
{
    int a, n, s = 0, sum2;
    scanf("%d %d", &a, &n);
    int i, j;
    s = sum2 = a;
    for (i = 2; i <= n; i++)
    {
        s = s * 10 + a;
        sum2 += s;
    }
    printf("%d", sum2);
    system("pause");
    return 0;
}


参考GPT和自己的思路:这段代码实现的功能是将输入的a重复拼接n次,并计算拼接后的数字之和。但是,这段代码有一些问题,无法达到所述的预期输出。

首先,代码缺少对输入数据是否合法的判断。如果用户输入的a不是一位数,则代码会产生错误的输出。例如,当a = 23时,代码会输出155。

其次,针对所述问题,公式应该是a + 11 * a + 111 * a + ... + n个1 * a,而不是简单的重复拼接。

以下是一个可以实现所述预期输出的代码示例:

#include <stdio.h>

int main()
{
    int a, n, s = 0, t = 0;
    scanf("%d %d", &a, &n);
    int i, j;
    for (i = 1; i <= n; i++)
    {
        t = t + a;
        s = s + t;
        a = a * 10;
    }
    printf("%d", s);
    return 0;
}

在这个版本的代码中,我们使用了两个变量分别来保存每一位拼接的结果和总和结果。每次将上一次拼接的结果乘以10,并和当前位的数值相加,然后将结果加到总和中。

如果输入 2 3,程序将会输出246,和题目所述的结果一致。

这么改,供参考:

#include <stdio.h>
int main()
{
    int a, n, s = 0, t;//修改
    scanf("%d %d", &a, &n);
    int i, j;
    for (i = 1 ,t = 0; i <= n; i++)//修改
    {
        t = t * 10 + a; //修改
        s += t;         //修改
    }
    printf("%d", s);
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 文章:用C语言解决S=2+22+222+...及类似形式问题 中也许有你想要的答案,请看下吧
  • 除此之外, 这篇博客: 简单编程题中的 例如:2+22+222+2222+22222 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    //方法1
    #include <stdio.h>
    int main()
    {
    	int a = 0;
    	int n = 0;
    	scanf("%d %d", &a, &n);//2 5
    	int i = 0;
    	int sum = 0;
    	int k = 0;
    	//2+22+222+2222+22222
    	for (i = 0; i < n; i++)
    	{
    		k = k * 10 + a;
    		sum += k;
    	}
    
    	printf("%d\n", sum);
    
    	return 0;
    }
    //方法2
    #include <stdio.h>
    int main()
    {
    	int a = 0;
    	int sum = 0;
    	printf("请输入一个0-9的数字:");
    	scanf("%d", &a);
    	sum = a + a * 11 + a * 111 + a * 1111;
    	printf("sum=%d\n", sum);
    
    	return 0;
    }

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^