Create your Gitee Account
Explore and code with more than 6 million developers,Free private repositories !:)
Sign up
Clone or download
EX7_1:多项式加法.md 2.49 KB
Copy Edit Web IDE Raw Blame History

EX7_1:多项式加法(5分)

题目内容:

一个多项式可以表达为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

时间限制:500ms内存限制:32000kb

题解

#include <stdio.h>

// 多项式A,B, 求和之后结果保存到A
int a[101], b[101];

// 读入多项式
int readPoly(int a[])
{
    int m, n;
    while (1)
    {
        scanf("%d %d", &m, &n);
        a[m]=n;
        if (m==0)
            break;
    }
    return 0;
}

// 多项式加法
int addPloy(int a[], int b[])
{
    for (int i=0;i<101;i++)
        a[i] += b[i];
    return 0;
}

// 打印一项nx^m, 第一项first=1
int printOne(int m, int n, int *first)
{
    if (*first)
        *first=0;
    else if (n>0)
        printf("+");

    if (m==0)
    {
        printf("%d", n);
        return 0;
    }
    if (n==-1)
        printf("-x");
    else if (n==1)
        printf("x");
    else
        printf("%dx", n);
    if (m>1)
        printf("%d",m);
}

// 打印多项式
int printPloy(int a[])
{
    int i=100;
    int first=1, printed=0;
    for (i=100;i>=0;i--)
        if (a[i]) break;
    while (i>=0)
    {
        if (a[i])
        {
            printOne(i, a[i], &first);
            printed=1;
        }
        i--;
    }
    if (!printed) printf("0");
    printf("\n");

    return 0;
}

int main()
{
    readPoly(a);
    readPoly(b);
    addPloy(a,b);
    printPloy(a);
    return 0;
}

Comment ( 0 )

Sign in for post a comment