星若有泪 发表于 2017-4-22 21:37:02

是关于多项式求和的问题 但不知道为什么运行不了

#include <stdio.h>

int main()
{
        int a,b;
        const int number = 100;
        int f1,f2,f;
        int i,j;
        for( i=0 ; i<number ; i++ ){
                f1 = 0;
                f2 = 0;
                f = 0;
        }
       
        if(a>=0 && a<=100){
        do{
        scanf("%d %d",&a,&b);
        f1 = b;
        }while(a != 0);
        do{
        scanf("%d %d",&a,&b);
        f2 = b;
        }while(a != 0);
        }
       
        int length1 = sizeof(f1)/sizeof(f1);
        int length2 = sizeof(f2)/sizeof(f2);
       
       
        for( i=0 ; i<length1 ; i++ ){
                for( j=0 ; j<length2 ; j++ ){
                        f = f1 + f2;
                }
        }
        int length = sizeof(f)/sizeof(f);
        for( i=length-1 ; i>=0 ;i-- ){
                if(i == 0){
                        printf("%d",f);
                }else if(f == 0){
                        printf("");
                }else{
                        printf("%dx%d+",f,i);
                }
        }
        printf("\b ");   
        return 0;
}

lumber2388779 发表于 2017-4-22 23:28:30

本帖最后由 lumber2388779 于 2017-4-22 23:29 编辑

a没有任何赋值就进行比较if(a>=0 && a<=100)

int length1 = sizeof(f1)/sizeof(f1);
int length2 = sizeof(f2)/sizeof(f2);
这两句计算方法不对 f1和f2都是具体的数值,都是int类型与f1 f2都是一致的,算出来都是1,而且sizeof计算f1和f2算出来的都是总长度就是100*4 4为int类型的字节数
在上边你可以给一个统计输入数字个数的下边用于控制就可以
if(a>=0 && a<=100){
      do{
      scanf("%d %d",&a,&b);
      f1 = b;
      }while(a != 0);
      do{
      scanf("%d %d",&a,&b);
      f2 = b;
      }while(a != 0);
      }

感觉这段有点太复杂,用for循环控制输入两个数分别给f1和f2,判断输入的值不是0就可以继续输入

星若有泪 发表于 2017-4-23 19:13:19

lumber2388779 发表于 2017-4-22 23:28
a没有任何赋值就进行比较if(a>=0 && a

这是题目
题目内容:
一个多项式可以表达为x的各次幂与系数乘积的和,比如:
2x6+3x5+12x3+6x+20
现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。
程序要处理的幂最大为100。

输入格式:
总共要输入两个多项式,每个多项式的输入格式如下:
每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。
注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。

输出格式:
从最高幂开始依次降到0幂,如:
2x6+3x5+12x3-6x+20
注意其中的x是小写字母x,而且所有的符号之间都没有空格,如果某个幂的系数为0则不需要有那项。

输入样例:
6 2
5 3
3 12
1 6
0 20
6 2
5 3
2 12
1 6
0 20

输出样例:
4x6+6x5+12x3+12x2+12x+40

lumber2388779 发表于 2017-4-23 20:33:14

星若有泪 发表于 2017-4-23 19:13
这是题目
题目内容:
一个多项式可以表达为x的各次幂与系数乘积的和,比如:


你的程序稍微修改下就可以了,因为第一个输入的数一定是最高次幂,那么输入第一次的时候将这个存到有个变量中然后比较两个多项式这个变量的大小,以大的开始计算,从大到0开始计算出所有的,然后再显示出来就可以

星若有泪 发表于 2017-4-26 20:08:00

lumber2388779 发表于 2017-4-23 20:33
你的程序稍微修改下就可以了,因为第一个输入的数一定是最高次幂,那么输入第一次的时候将这个存到有个变 ...

        int a,b,c;
        scanf("%d %d",&a,&b);
        const int number = 101;
        int f1,f2,f;
        int i,j;
        for( i=0 ; i<number ; i++ ){
                f1 = 0;
                f2 = 0;
                f = 0;
        }
        f1 = b;
        c = b;
       
        while(a>= 0 && a <= 101){
                while(a != 0){
                        scanf("%d %d",&a,&b);
                        if(c >= b){
                                f1 = b;
                        }
                }
                if(a ==0)break;
        }
    scanf("%d %d",&a,&b);
    f2 = b;
    c = b;
    while(a >= 0 && a <= 101){
            while(a != 0){
                    scanf("%d %d",&a,&b);
                    if(c >= b){
                            f2 = b;
                        }
                }
                if(a == 0)break;
        }

感觉越改越复杂了我实现不了如果 输入的幂次>第一次输入的幂次就停止继续输入这个功能,该怎么改?

lumber2388779 发表于 2017-4-26 20:13:59

星若有泪 发表于 2017-4-26 20:08
感觉越改越复杂了我实现不了如果 输入的幂次>第一次输入的幂次就停止继续输入这个功能,该怎么改 ...

我抽空帮你看下吧,最近有点忙

星若有泪 发表于 2017-4-26 21:18:42

lumber2388779 发表于 2017-4-26 20:13
我抽空帮你看下吧,最近有点忙

嗯嗯谢谢{:10_254:}

lumber2388779 发表于 2017-4-27 10:11:27

星若有泪 发表于 2017-4-26 21:18
嗯嗯谢谢

#include <stdio.h>

int main()
{
      int a,b;
      const int number = 100;
      int f1,f2,f;
      int i,j;
      int lenf1,lenf2
      for( i=0 ; i<number ; i++ ){
                f1 = 0;
                f2 = 0;
                f = 0;
      }
      
      scanf("%d %d",a,b);
      lenf1=a;
      while(a >0)
      {f1=b;
      scanf("%d %d",a,b);}
      f1=b;

      scanf("%d %d",a,b);
      lenf2=a;
      while(a >0)
      {f2=b;
      scanf("%d %d",a,b);}
      f2=b;
      int len=lenf1>lenf2?lenf1:lenf2;
      for( i=len ; i>=0 ; i--){
                f=f1+f2;
                if(i == 0){
                        printf("%d",f);
                }
                else if(f==1)
                {printf("%dx+",f);}
                else if(f == 0){
                        printf("");
                }else{
                        printf("%dx%d+",f,i);
                }
                }
      }
      
      printf("\b ");
      return 0;
}

这是代码,自己研究思考下,不懂问我,手机打的,可能会有语法错误
页: [1]
查看完整版本: 是关于多项式求和的问题 但不知道为什么运行不了