C语言/C++实现求序列和a+aa+aaa.....

作者在文章中分享了一段C语言代码,该代码旨在计算并累加给定数字的n位倍数之和,如2+22+222。然而,原始代码存在逻辑问题导致结果不正确。经过多次尝试和ChatGPT的协助,作者发现并修复了问题,最终实现正确计算的方法是通过引入额外的变量来保存每个阶段的和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天发现累计观看量已经超了3000+,谢谢大家对我这篇文章的支持!

先来看题目:

从键盘输入两个整型变量an的值,求a+aa+aaa+aa……ana)之和。例如,若输入23,则输出序列和为2462+22+222)。

要求定义函数double fun(int a,int n)计算并返回a...a(n个a)之值。

【输入形式】两个变量输入时以空格间隔
【输出形式】

其实这道题我“以为”很简单,没想到没考虑周全

给大家看看代码:(错误示范)

#include <stdio.h>

double fun(int a,int n)		//计算n个a的值 
{
	int i;
	for(i=0;i<n;i++)
	{
		a=10*a+a;
	}
	return a;
}

int main()
{
	int n,a;
	double s=0;
	scanf("%d %d",&a,&n);
	fun(a,n);
	s += a;
	printf("s=%d",s);
	return 0;
} 

按题目输入2 3,s=0。真的服气,后来经过了一顿操作之后终于是把结果显示出来了,但是。。。。数据不对,一会2000,一会6000!!!

当然了,我把这段代码发给了ChatGPT让他帮我解决一下问题,不但问题没解决,还给我的代码大搞外科手术。结果改完还是一个鸟样

不让ChatGPT改了,我自己又琢磨了一下,按着ChatGPT的思路改了几下,还是不行。(还是错误示范哈哈哈)

#include <stdio.h>
#include <math.h>

double fun(int a,int n)  //计算n个a的值 
{
 int i,s=0;
 for(i=0;i<n;i++)   
 {
  s += a;
  a=10*a;  
 } 
 return s;
}       
        
int main()
{
 int n,a,s; 
 scanf("%d %d",&a,&n);
 s=fun(a,n);
 printf("s=%d",s);
 return 0;
}           

2 3答案很接近了,s=222,1 3的话,s=111

直到我想起我的书上课后习题有一模一样,然后就去找了答案

多设了一个变量,tn作为赋值后的tn为i个a组成数的值,例如3个1,就是1,11,111,然后sn再累加,算出总和,数据分析如下:

 这样子就可以保存个位和十位的1

“优化”后的代码:(正确答案)

#include <stdio.h>
#include <math.h>

double fun(int a,int n)		//计算n个a的值 
{
	int i,sn=0,tn=0;			//我把求和部分移到函数上面去了
	for(i=0;i<n;i++)   			
	{
		tn = tn + a;		//赋值后的tn为i个a组成数的值,例如3个1,就是1,11,111
		sn = sn + tn;		//赋值后的sn为前i项的和
		a=10*a;  	
	}
	return sn;
}       
        
int main()
{
	int n,a,sn=0;
	scanf("%d %d",&a,&n);
	sn = fun(a,n);
	printf("s=%d",sn);
	return 0;
}                 

终于是把这一题写完了,感觉很侮辱智商

还没看懂?

放大招!

现在知道sn的作用了吧?

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值