精华内容
下载资源
问答
  • 多项式相乘c语言
    2021-07-11 19:12:22

    【问题描述】(建议用链表实现)

    编写一个程序实现两个一元多项式相乘。

    【输入形式】

    首先输入第一个多项式中系数不为0的项的系数和指数,以一个空格分隔。且该多项式中各项的指数均为0或正整数,系数和最高幂次不会超过int类型的表示范围。对于多项式 anxn +a n-1 x n-1 +......+ a1x1 + a0x0 的输入方法如下:
    an  n  a n-1  n-1 ......  a1  1  a0  0 
    即相邻两个整数分别表示表达式中一项的系数和指数。在输入中只出现系数不为0的项。最后一项的指数后没有空格,只有一个回车换行符。
    按照上述方式再输入第二个多项式。

    【输出形式】

    将运算结果输出到屏幕。将系数不为0的项按指数从高到低的顺序输出,每次输出其系数和指数,均以一个空格分隔,最后一项的指数后也可以有一个空格。

    【样例输入】

    10 80000 2 6000 7 300 5 10 18 0
    3 6000 5 20 8 10 6 0

    【样例输出】

    30 86000 50 80020 80 80010 60 80000 6 12000 21 6300 10 6020 31 6010 66 6000 35 320 56 310 42 300 25 30 130 20 174 10 108 0

    【样例说明】

    输入的两行分别代表如下表达式:
    10x80000 + 2x6000 + 7x300 + 5x10 + 18
    3x6000 + 5x20 + 8x10 + 6
    相乘结果为:
    30x86000 + 50x80020 + 80x80010 + 60x80000 + 6x12000 + 21x6300 + 10x6020 + 31x6010 + 66x6000 + 35x320 + 56x310 + 42x300 + 25x30 + 130x20 + 174x10 + 108

    提示:利用链表存储多项式的系数和指数。

    【评分标准】

    该题要求输出相乘后多项式中系数不为0的系数和指数,共有5个测试点。上传C语言文件名为multi.c。

    参考代码:

    
    #include <stdio.h>
    struct duoxiangshi
    {
        int xishu;
        int zhishu;
    }duoxiangshi1[10000],duoxiangshi2[10000],duoxiangshi[1000000];
    int main()
    {
        int i,j,len1,len2,k,temp,len3;
        for(i=0;;i++)
        {
            scanf("%d%d",&duoxiangshi1[i].xishu,&duoxiangshi1[i].zhishu);
            len1=i+1;
            if(getchar()=='\n')
                break;
        }
        for(i=0;;i++)
        {
            scanf("%d%d",&duoxiangshi2[i].xishu,&duoxiangshi2[i].zhishu);
            len2=i+1;
            if(getchar()=='\n')
                break;
        }
        for(i=0,k=0;i<len1;i++)
        {
            for(j=0;j<len2;j++,k++)
            {
                duoxiangshi[k].xishu=duoxiangshi1[i].xishu*duoxiangshi2[j].xishu;
                duoxiangshi[k].zhishu=duoxiangshi1[i].zhishu+duoxiangshi2[j].zhishu;
            }
        }
        len3=k;
        for(k=0;k<len3;k++)
        {
            for(j=k+1;j<len3;j++)
            {
                if(duoxiangshi[k].zhishu<duoxiangshi[j].zhishu)
                {
                    temp=duoxiangshi[k].xishu;
                    duoxiangshi[k].xishu=duoxiangshi[j].xishu;
                    duoxiangshi[j].xishu=temp;
                    temp=duoxiangshi[k].zhishu;
                    duoxiangshi[k].zhishu=duoxiangshi[j].zhishu;
                    duoxiangshi[j].zhishu=temp;
                }
                else if(duoxiangshi[k].zhishu==duoxiangshi[j].zhishu)
                {
                    duoxiangshi[k].xishu+=duoxiangshi[j].xishu;
                    duoxiangshi[j].xishu=0;
                    duoxiangshi[j].zhishu=0;
                }
            }
        }
        for(k=0;duoxiangshi[k].xishu!=0;k++)
        {
            printf("%d %d ",duoxiangshi[k].xishu,duoxiangshi[k].zhishu);
        }
    }

    更多相关内容
  • 一元二次多项式相乘C语言,实验报告
  • 通过C语言实现多项式的相加,相乘等操作
  • 多项式相乘 C语言 多项式相乘 C语言 有需要的同学下载~!
  • 多项式相乘(C语言)

    2021-10-08 20:33:18
    #include<stdio.h> #include<stdlib.h> typedef struct node* list; struct node { double coef; int expon; list next; };... printf("输入多项式的项数:"); scanf("%d", &n);
    #include<stdio.h>
    #include<stdlib.h>
    typedef struct node* list;
    struct node
    {
    	double coef;
    	int expon;
    	list next;
    };
    list create()                                                    //创建 
    {
    	int n;
    	printf("输入多项式的项数:");
    	scanf("%d", &n);
    	printf("输入多项式的系数和指数(空格为界):");
    	list head = (list)malloc(sizeof(struct node)), now = head, last;
    	for (; n--; now = last)
    	{
    		last = (list)malloc(sizeof(struct node));
    		scanf("%lf%d", &last->coef, &last->expon);
    		now->next = last;
    	}
    	now->next = NULL;
    	return head;
    }
    list mul(list a, list b)                                         //相乘 
    {
    	list head = (list)malloc(sizeof(struct node)), now = head, last;
    	for (list i = a->next; i != NULL; i = i->next)for (list j = b->next; j != NULL; j = j->next)
    	{
    		last = (list)malloc(sizeof(struct node));
    		last->coef = i->coef * j->coef;                         // 系数
    		last->expon = i->expon + j->expon;                      // 指数
    		now->next = last;
    		now = last;
    	}
    	now->next = NULL;
    	return head;
    }
    void sort(list a)                                              //排序并且将expon相同的合并 
    {
    	if (a->next == NULL || a->next->next == NULL)return;
    	list r = a, i;
    	while (r->next->next != NULL)r = r->next;
    	for (; 1; r = i)
    	{
    		if (r != a)
    			for (i = a; 1; i = i->next)
    			{
    				list j = i->next, k = j->next;
    				if (j->expon < k->expon)
    				{
    					if (j == r)r = k;
    					else if (k == r)r = j;
    					i->next = k, j->next = k->next, k->next = j;
    				}
    				if (i->next == r)break;
    			}
    		if (r->next->next != NULL)
    		{
    			list j = r->next, k = j->next;
    			if (j->expon == k->expon)j->coef += k->coef, j->next = k->next;
    		}
    		if (r == a)break;
    	}
    }
    void show(list a)                                               //输出 
    {
    	list i = a->next;
    	if (i != NULL)
    	{
    		printf("%g*x^%d", i->coef, i->expon);
    		for (i = i->next; i != NULL; i = i->next)if (i->coef)
    		{
    			if (i->coef > 0)putchar('+');
    			printf("%g*x^%d", i->coef, i->expon);
    		}
    	}
    	putchar('\n');
    	return;
    }
    int main()
    {
    	list a = create(), b = create(), c = mul(a, b);
    	show(a);
    	show(b);
    	sort(c);
    	show(c);
    	return 0;
    }
    

    在这里插入图片描述

    展开全文
  • FFT加速多项式乘法原理不多说了,直接贴代码如下: 在vs2017上测试成功 #include "pch.h" #define _CRT_SECURE_NO_WARNINGS #include "stdlib.h" #include "math.h" #include "stdio.h" #define N 8 #define ...

    本文代码中FFT使用递归版本实现

    FFT加速多项式乘法原理不多说了,直接贴代码如下:

    在vs2017上测试成功

    #include "pch.h"
    #define _CRT_SECURE_NO_WARNINGS
    #include "stdlib.h"
    #include "math.h"
    #include "stdio.h"
    
    
    #define N 8
    #define MAXN 100
    
    #define Pi  3.1415927   //定义圆周率Pi
    #define LEN sizeof(struct Compx)  //定义复数结构体大小
    
    //-----定义复数结构体-----------------------
    typedef struct Compx
    {
    	double real;
    	double imag;
    }Compx;
    
    //-----复数乘法运算函数---------------------
    struct Compx mult(struct Compx b1, struct Compx b2)
    {
    	struct Compx b3;
    	b3.real = b1.real*b2.real - b1.imag*b2.imag;
    	b3.imag = b1.real*b2.imag + b1.imag*b2.real;
    	return(b3);
    }
    
    //-----复数减法运算函数---------------------
    struct Compx sub(struct Compx a, struct Compx b)
    {
    	struct Compx c;
    	c.real = a.real - b.real;
    	c.imag = a.imag - b.imag;
    	return(c);
    }
    
    //-----复数加法运算函数---------------------
    struct Compx add(struct Compx a, struct Compx b)
    {
    	struct Compx c;
    	c.real = a.real + b.real;
    	c.imag = a.imag + b.imag;
    	return(c);
    }
    
    void fft(Compx *a, int n, int inv);
    
    int main()
    {
    	int i;
    
    	int x[N] = { 0 }, y[N] = { 0 };
    
    	printf("\nN=%d\n" , N);
    	printf("\n输入两个多项式的系数,输入系数为N多项式长度的一半\n");
    	printf("\n输入第一个多项式的系数\n");
    	for (i = 0; i < N/2; i++)
    	{
    		scanf("%d", &x[i]);
    	}
    
    	printf("\n输入第二个多项式的系数\n");
    	for (i = 0; i < N/2; i++)
    	{
    		scanf("%d", &y[i]);
    	}
    
    	struct  Compx * a = (struct Compx *)malloc(N*LEN);			//为结构体分配存储空间
    	struct  Compx * b = (struct Compx *)malloc(N*LEN);
    	struct  Compx * c = (struct Compx *)malloc(N*LEN);
    
    	//初始化======================================= 
    	printf("\na多项式初始化:\n");
    	for (i = 0; i < N; i++)
    	{
    		a[i].real = x[i];
    		a[i].imag = 0;
    		printf("%.4f ", a[i].real);
    		printf("+%.4fj  ", a[i].imag);
    		printf("\n");
    	}
    	printf("\nb多项式初始化:\n");
    	for (i = 0; i < N; i++)
    	{
    		b[i].real = y[i];
    		b[i].imag = 0;
    		printf("%.4f ", b[i].real);
    		printf("+%.4fj  ", b[i].imag);
    		printf("\n");
    	}
    	printf("\n结果c多项式初始化:\n");
    	for (i = 0; i < N; i++)
    	{
    		c[i].real = 0;
    		c[i].imag = 0;
    		printf("%.4f ", c[i].real);
    		printf("+%.4fj  ", c[i].imag);
    		printf("\n");
    	}
    
    	fft(a, N, 1);
    
    	printf("\n第一个多项式FFT计算结果:\n");
    	for (i = 0; i < N; i++)
    	{
    		printf("%.4f ", a[i].real);
    		printf("+%.4fj  ", a[i].imag);
    		printf("\n");
    	}
    
    	fft(b, N, 1);
    
    	printf("\n第二个多项式FFT计算结果:\n");
    	for (i = 0; i < N; i++)
    	{
    		printf("%.4f ", b[i].real);
    		printf("+%.4fj  ", b[i].imag);
    		printf("\n");
    	}
    
    	for (i = 0; i < N; i++)
    		a[i] = mult(a[i] , b[i]);
    
    	fft(a, N, -1);
    	for (i = 0; i < N; i++) {
    		c[i].real = a[i].real / N;
    		c[i].imag = a[i].imag / N;
    	}
    		
    	printf("\n乘积多项式结果:\n");
    	for (i = 0; i < N; i++)
    	{
    		printf("%.4f ", c[i].real);
    		printf("+%.4fj  ", c[i].imag);
    		printf("\n");
    	}
    
    	return 0;
    }
    
    void fft(Compx *a, int n, int inv) {
    	if (n == 1)return;
    	int mid = n / 2;
    	static Compx b[MAXN];
    	int i;
    	for (i = 0; i < mid; i++) {
    		b[i] = a[i * 2];
    		b[i + mid] = a[i * 2 + 1];
    	}
    		
    	for (i = 0; i < n; i++)
    		a[i] = b[i];
    	fft(a, mid, inv);
    	fft(a + mid, mid, inv);//分治
    	for (i = 0; i < mid; i++)
    	{
    		Compx x;
    		x.real = cos(2 * Pi*i / n);
    		x.imag = inv * sin(2 * Pi*i / n);
    
    		b[i] = add(a[i], mult(x, a[i + mid]));
    		b[i + mid] = sub(a[i] , mult(x , a[i + mid]));
    	}
    	for (i = 0; i < n; i++)
    		a[i] = b[i];
    }

     

    展开全文
  • C语言 多项式乘法 算法

    千次阅读 2021-01-13 16:46:21
    C语言中怎么表示? 最简单直观的方式就是: 将多项式对应的系数储存在数组中,而数组下标就是项的指数 最后写出相应的代码 #include <stdio.h> int main() { int i, j, m, n; scanf("%d

    多项式乘法

    什么是多项式?

    由若干个单项式相加组成的代数式叫做多项式(若有减法:减一个数等于加上它的相反数)。
    多项式中的每个单项式叫做多项式的项,这些单项式中的最高项次数,就是这个多项式的次数。 多项式中不含字母的项叫做常数项。

    在C语言中怎么表示?

    最简单直观的方式就是:

    将多项式对应的系数储存在数组中,而数组下标就是项的指数

    在这里插入图片描述

    最后写出相应的代码

    #include <stdio.h>
    
    int main()
    {
        int i, j, m, n;
    
        scanf("%d", &m);
        double a[m + 1];
        for (i = 0; i <= m; i++)
            scanf("%lf", &a[i]);
    
        scanf("%d", &n);
        double b[n + 1];
        for (i = 0; i <= n; i++)
            scanf("%lf", &b[i]);
    
        double c[m + n + 1];
        for (i = 0; i <= m + n; i++)
            c[i] = 0;
    
        for (i = 0; i <= m; i++)
            for (j = 0; j <= n; j++)
                c[i + j] += a[i] * b[j];
     
        printf("%f*x^%d", c[0], 0);
        for (i = 1; i <= m + n; i++)
            printf(" + %f*x^%d", c[i], i);
    
        return 0;
    }
    

    测试一下

    例如

    (1 + 2x + 3x ^2)·(1 + 2x)=1 + 4x + 7x ^2 + 6x ^3

    结果

    在这里插入图片描述

    下一篇:多项式除法

    https://blog.csdn.net/m0_52313753/article/details/112585857

    展开全文
  • C语言实现多项式相乘

    2012-11-05 13:57:56
    编程实现若干个多项式相乘。多项式的输入输出格式为:系数在前,指数在后,各项按指数递增排列,每个多项式输入时以两个0结束。系数为0的项不输出。例如:1+4X3-9X5输入格式为:1 0 0 1 0 2 4 3 0 4 -9 5 0 0或者 1 ...
  • 能够计算一元多项式相加的程序,注释完整,一看就懂,300多行的代码
  • int main() { printf(" 链表实现多项式的乘法 \n"); int n; printf("请输入A(X)的项数(降幂排列)\n"); scanf("%d",&n); listnode *head_a=CreateList(n); printf("A(X)="); printflist(head_a); printf("请输入B(X)...
  • (c语言)浙大数据结构Mooc作者答案集 下面是关于这道题的图片 关于这道题的闲谈 啊 这道题确实折磨人 我还能依稀记得我就是受了上道题目的影响 导致这道题刚开始的时候是用的不创造新的节点直接肢解连接 因为那个...
  • 一元多项式A 、B 按降次排列,用带头结点的链表存储,求 C=A ×B,试编程实现。 代码实现 #include<stdio.h> #include<stdlib.h> typedef struct Lnode{ int coef; //定义系数 int exp; //定义...
  • 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出...
  • C语言写的相加相乘的代码,有注释。简单易懂
  • 一元多项式运算C语言

    2010-05-23 19:02:28
    一元多项式求和实质上是合并同类项的过程,其运算规则为: (1)若两项的指数相等,则系数相加; (2)若两项的指数不等,则将两项加在结果中。
  • 直接可以运行的源代码!方便大家参考。曾经自己苦苦在网上搜索无果。。。知道那是多么痛苦的事·
  • C语言实现一元多项式的运算(相加,相减,相乘) 1.创建多项式时,无论指数项按什么顺序输入,输出均能实现以升幂顺序输出,且输入时有相同指数项时能够实现合并。 2.能够代入确切的X计算出最终多项式的值。 ...
  • 一元稀疏多项式计算器(C语言代码实现)

    千次阅读 多人点赞 2020-11-18 15:29:17
    两个多项式相乘 计算多项式在x处的值 求多项式a的导函数 [完整代码] //一元稀疏多项式计算器 #include<stdio.h> #include<stdlib.h> typedef struct LNode { float coef; //系数 int exp; //指数 ...
  • 数据结构与算法分析 C 语言描述第二版第三章——链表实现多项式相乘
  • BUAA多项式相乘

    千次阅读 2020-06-21 17:25:13
    编写一个程序实现两个一元多项式相乘。 【输入形式】 首先输入第一个多项式中系数不为0的项的系数和指数,以一个空格分隔。且该多项式中各项的系数均为0或正整数,系数和最高幂次不会超过int类型的表示范围。对于...
  • 【数据结构】多项式乘法与加法(c语言链表实现)

    万次阅读 多人点赞 2019-07-29 17:04:49
    1.多项式表示 数据结构设计 //将struct与typedef分开定义 typedef struct PolyNode *Polynomial; //使用 typedef 给一个还未完全声明的类型 PolyNode 起了一个新别名Polynomial struct PolyNode{ int coef; //...
  • /实现n个多项式相乘/ #include “stdio.h” const int N0=20; //常数: 多项式最多20个 typedef struct node{ //多项式的项(链表节点), 数据包含: 项的系数和指数, 下一项的指针. int c, e; //c-系数(coefficient);...
  • 多项式相乘(conv.cpp)

    千次阅读 2017-08-02 16:39:36
    多项式相乘:conv.cpp 【问题描述】 编程实现若干个多项式相乘。多项式的输入输出格式为:系数在前,指数在后,各项按指数递增排列,每个多项式输入时以两个0结束。系数为0的项不输出。例如:1+4X3-9X5 n 输入...
  • ![图片说明](https://img-ask.csdn.net/upload/202002/25/1582594928_383080.png) 输入样例: 4 3 4 -5 2 6 1 -2 0 3 5 20 -7 4 3 1 ``` #include #include typedef struct Node *Poly;...```
  • [PAT] 一元多项式的乘法与加法运算 C语言实现 [PAT] 02-线性结构1 一元多项式的乘法与加法运算 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零...
  • c语言实现多项式的基本运算

    千次阅读 2020-09-22 23:32:35
    多项式是数学中常用的一种表达式,现在我们给出用c语言编程实现多项式的计算,并且多项式的计算是链表的典型应用,通过编程实现多项式,也为我们巩固一下链表的知识以及它的生活应用。 下面给出代码 #include <...
  • 【问题描述】 编写一个程序实现两个一元多项式相乘。 【输入形式】 首先输入第一个多项式中系数不为0的项的系数和指数,以一个空格分隔。且该多项式中各项的系数均为0或正整数,系数和最高幂次不会超过int类型的表示...
  • //c语言版数据结构(奇迹冬瓜)-链表实战(4)双链表解一元多项式相乘/*主要函数思想:初始化一元多项式A初始化一元多项式B初始化一元多项式C给一元多项式A赋入数据给一元多项式B赋入数据(指数升序)把AB各项累乘放入C中用...
  • BUAA(2021春)多项式相乘

    2021-04-29 17:11:11
    BUAA数据结构第三次编程题——多项式相乘看前须知题目内容问题描述输入形式输出形式样例样例说明题解易错点和难点参考代码补充测试的数据 看前须知 要点介绍和简要声明. 题目内容 问题描述 编写一个程序实现两个一元...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,171
精华内容 468
关键字:

多项式相乘c语言