一见倾心547 2021-09-25 16:04
浏览 539
已结题

c语言两个多项式相除

【分析】
一元多项式除法可以仿照数字的竖式除法,用减法来实现带余项的除法。其演算过程如 下:
(1)把被除式、除式按变量作降幂排列,并把所缺的项用零补齐;
(2)用被除式的第一项除以除式第一项,得到商式的第一项;
(3)用商式的第一项去乘除式,把积写在被除式下面(同类项对齐),消去相等项, 把不相等的项结合起来;
(4)把减得的差当作新的被除式,再按照上面的方法继续演算,直到余式为零或余式 的次数低于除式的次数时为止。
实现思路:
(1)设 P(X)为被除式、Q(x)为除式、R(x)为商式,若 P(X)最高次项为 m 次,Q(x) 最高次项为 n 次,则 R(x) 最高次项为 m-n 次;
(2)若用数组 a、 b、 c 存储 P(X)、Q(x)、 R(x),则第一次运算用 a[m]/b[n],并将结果放到 c[m-n]中,然后从数组 a 最高次开始依次减去 c[m-n]乘以数组 b;
(3)第二次运算用新的数组 a 和数组 b 继续上面的运算过程(此时 m 变为 m-1);
(4)重复执行第(2)和(3)步,直到数组 a 全为 0 或者数组 a 中的最高次项(即不为 0 的最大下标)小于数组 b 中的最高次项。
我写的是这样的:


#include"stdio.h"
#include"stdlib.h"
#include<math.h>
void input(int y[], int m)/*多项式系数输入函数*/
{
    int i;
    for (i = 0; i < m; i++)
        scanf("%d", &y[i]);
}
void output(int a[], int x)/*多项式输出函数*/
{
    int i, sum = 0;
    for (i = 0; i < x; i++)
    {
        if (a[i] == 0)
            continue;
        if (i == 0)
            printf("%d", a[i]);
        else if (i == 1)
        {
            if (a[i] == 1)
                printf("+X");
            else if (a[i] == -1)
                printf("-X");
            else if (a[i] > 0)
                printf("+%dX", a[i]);
            else if (a[i] < 0)
                printf("%dX", a[i]);
        }
        else
        {
            if (a[i] == 1)
                printf("+X^%d", i);
            else if (a[i] == -1)
                printf("-X^%d", i);
            else if (a[i] > 0)
                printf("+%dX^%d", a[i], i);
            else if (a[i] < 0)
                printf("%dX^%d", a[i], i);
        }
    }
}
void division(int a[], int m, int b[], int n, int c[])
{
    int i, j = m;
    int d[100] = { 0 };/*用来存放商乘除数的中间多项式*/
    for (int r = 0; r <=m - n; r++)
        c[r] = 0;
    while ( m >= n)
    {
        c[m - n] = a[m] / b[n];
        for (i = n; i >=0; i--)
        {
            d[j] = c[m - n] * b[i];
            j--;
        }
        for (int k = m; k >= 0; k--)
        {
            a[k] = a[k] - d[k];
        }
        m--;
    }
}
int main()
{
    int P[100] = { 0 }, Q[100] = { 0 }, R[100] = { 0 };
    int m, n;
    printf("请输入一元多项式的项数m(0<m<=100):");
    scanf("%d", &m);
    printf("请输入一元多项式的系数(按指数由小到大排列输入):");
    input(P, m);
    printf("您输入的多项式为P(X)=");
    output(P, m);
    printf("\n\n请输入一元多项式Q(X)的项数n(0<n<=100):");
    scanf("%d", &n);
    printf("请输入Q(X)的系数(按指数由小到大排列输入):");
    input(Q, n);
    printf("您输入的多项式Q(X)=");
    output(Q, n);
    printf("\n\n两个多项式相除结果F(X)=P(X)/Q(X)=");
    division(P, m, Q, n, R);
    output(R, m - n);
    return 0;
}

例子的运行结果是这样:

img

所以为什么没有结果呢?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 10月3日
    • 创建了问题 9月25日

    悬赏问题

    • ¥20 公众号如何实现点击超链接后自动发送文字
    • ¥15 用php隐藏类名和增加类名
    • ¥15 算法设计与分析课程的提问
    • ¥20 汇川小型plc控制小米微电机
    • ¥15 用MATLAB汇总拟合图
    • ¥15 智能除草机器人方案设计
    • ¥15 对接wps协作接口实现消息发送
    • ¥15 SQLite 出现“Database is locked” 如何解决?
    • ¥15 已经加了学校的隶属邮箱了,为什么还是进不去github education?😭
    • ¥15 求会做聚类,TCN的朋友有偿线上指导。以下是目前遇到的问题