今天发现累计观看量已经超了3000+,谢谢大家对我这篇文章的支持!
先来看题目:
从键盘输入两个整型变量a和n的值,求a+aa+aaa+aa……a(n个a)之和。例如,若输入2和3,则输出序列和为246(2+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的作用了吧?