回 帖 发 新 帖 刷新版面

主题:请教高手

以下是在一本书里看到的计算:1+11+111+1111.......数列的程序,但经验证感觉有错,修改了一下,程序二,但还是错,找不到原因,求各位高手指点一下,谢谢!

书上原程序:
#include"stdio.h"
#include"math.h"
main()
{
 int a,x,n=1;
 long i=1,tn,sum=0;
 scanf("%d%d",&a,&x);
 tn=a;
 while(n<=x)
 {
   sum+=tn;
   tn=tn*10+x;
   n++;
 }
 printf("result is %ld",sum);
 getch();
}
[color=FF0000]此程序运行:当a=1,x=2时,输出为13,结果显然是错误的;[/color]

修改后程序二:
#include"stdio.h"
#include"math.h"
main()
{
 int a,x,n=1;
 long tn;
 scanf("%d%d",&a,&x);
 tn=a;
 while(n<x[color=FF0000])/*去掉了“=”*/[/color]
 {
    tn=tn*10+x[color=800000];/*去掉了sum一行,直接用tn代替*/[/color]
   n++;
 }
 printf("result is %ld",tn);/[color=FF0000]*用tn代替sum输出*/[/color]
 getch();
}
本人觉得tn=tn*10+x就能达到求和sum的功能,因此去掉了sum,但是当x>=3时还是有错误,不知何故?

回复列表 (共16个回复)

11 楼

是有最优的算法,但这也只是一般的算法,引入那么多的变量也是必要的!!
请高手能不能讲讲一下较为优秀的算法,我想借此学习一下,谢谢了!!

12 楼

知道了,你是在 tn=tn*10+x; 地方错了,应该为:tn=tn*10+a; x为项数,不是初值,

则程序这样就对了:
#include"stdio.h"
#include"math.h"
int  main(void)
{
 int a,x,n=1;
 long i=1,tn,sum=0;
 printf("print the a and x:\n");
 scanf("%d,%d",&a,&x);
 tn=a;
 while(n<=x)
 {
   sum+=tn;
   tn=tn*10+a;
   n++;
 }
 printf("result is %ld\n",sum);
 return 0;
}

13 楼

对比一下你改的lz的程序和你自己那个代码,你就知道你多开了多少东西了吧
时间代价上你8楼的代码比lz的代码高出了一个量级……

14 楼

[quote]按照你的算法,1+11+111的计算过程变成了:1 13 133
显然是错的,先不要想优化计算,先写出最普通的计算方法吧
实现如下过程:

定义加数,结果,赋初值
循环
  结果与加数相加
  加数增长一位[/quote]

编程最重要的是思路清晰,授人以渔与授人以鱼同样重要,谢谢!

15 楼

[quote]知道了,你是在 tn=tn*10+x; 地方错了,应该为:tn=tn*10+a; x为项数,不是初值,

则程序这样就对了:
#include"stdio.h"
#include"math.h"
int  main(void)
{
 int a,x,n=1;
 long i=1,tn,sum=0;
 printf("print the a and x:\n");
 scanf("%d,%d",&a,&x);
 tn=a;
 while(n<=x)
 {
   sum+=tn;
   tn=tn*10+a;
   n++;
 }
 printf("result is %ld\n",sum);
 return 0;
}[/quote]
呵呵,谢谢你啊,看来现在书上的错误也太多了。

16 楼

书中应该是印错了,不过这种算法确实挺不错的,比起我的那个,尤其在时间上,效率高的多了!!呵呵,大家共勉啊!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册