回 帖 发 新 帖 刷新版面

主题:请教高手

以下是在一本书里看到的计算: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个回复)

沙发

你的算法好像不对,看了半天没看懂 。 其中的一种思路,是拆分成:个位,十位,百位.....再进行求和

下面的程序参考一下,也许对你有些帮助:

#include<stdio.h>

int main(void)
{
    int i,j,flag;
    int num,m=1,sum;
    printf("The sum of number\n");
    scanf("%d",&num);
    sum=num;
    for(i=1,j=1;num-i>0;i++,j++)
    {
     for(flag=1;flag<=num-i;flag++)
     {  
        m*=10;
        
     }
        m*=j;
        sum+=m;
        m=1;
    }
    printf("%d\n",sum);
    return 0;
}

    
        

板凳

为什么会有两个输入?分别代表什么?

3 楼

因为此求和函数为:a+aa+aaa+......+.....,a代表初值,x代表有项,假如输入a=1,x=3,则是求1+11+111的值。

4 楼

[quote]你的算法好像不对,看了半天没看懂 。 其中的一种思路,是拆分成:个位,十位,百位.....再进行求和

下面的程序参考一下,也许对你有些帮助:

#include<stdio.h>

int main(void)
{
    int i,j,flag;
    int num,m=1,sum;
    printf("The sum of number\n");
    scanf("%d",&num);
    sum=num;
    for(i=1,j=1;num-i>0;i++,j++)
    {
     for(flag=1;flag<=num-i;flag++)
     {  
        m*=10;
        
     }
        m*=j;
        sum+=m;
        m=1;
    }
    printf("%d\n",sum);
    return 0;
}

    
        
[/quote]
谢谢,虽然与我所要求的不一样,但是具有参考价值!

5 楼

思路有问题,如果进位的话程序就会出错

6 楼

[quote]思路有问题,如果进位的话程序就会出错[/quote]
我也知道思路有问题,麻烦指出哪里有问题,估计就错在算法那里。谢谢!

7 楼

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

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

8 楼

如果要是按你的要求的话,添加个a ,就行了!

以下就是最终的程序,反正也就是这个思路:
#include<stdio.h>

int main(void)
{
    int i,j,flag;
    int num,a,m=1,sum;    //a代表初值,num 代表有项
    printf("The sum of number and the a :\n");
    scanf("%d,%d",&num,&a);
    sum=num*a;
    for(i=1,j=1;num-i>0;i++,j++)
    {
     for(flag=1;flag<=num-i;flag++)
     {  
        m*=10;
        
     }
        m*=j*a;
        sum+=m;
        m=1;
    }
    printf("%d\n",sum);
    return 0;
}

9 楼

[quote]如果要是按你的要求的话,添加个a ,就行了!

以下就是最终的程序,反正也就是这个思路:
#include<stdio.h>

int main(void)
{
    int i,j,flag;
    int num,a,m=1,sum;    //a代表初值,num 代表有项
    printf("The sum of number and the a :\n");
    scanf("%d,%d",&num,&a);
    sum=num*a;
    for(i=1,j=1;num-i>0;i++,j++)
    {
     for(flag=1;flag<=num-i;flag++)
     {  
        m*=10;
        
     }
        m*=j*a;
        sum+=m;
        m=1;
    }
    printf("%d\n",sum);
    return 0;
}[/quote]
弯子绕的不小,虽然没看出算法错误吧……但是你图什么啊……开了这么多没必要的变量

10 楼

我也想听听你的思路,能不能详细讲讲,谢谢了!!

我来回复

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