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

分析问题:

这是一道循环结构的题,要求我们计算前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 1

int 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;
}

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

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

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值