02-线性结构2 一元多项式的乘法与加法运算 (20分)

本文介绍了一种使用C语言实现多项式加法和乘法的方法。通过数组存储多项式的系数,利用循环结构完成多项式的运算。文章还分享了如何优雅地输出结果,并附带了一些个人学习心得。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>
#define N2 2001
#define N1 1001
void addition(int a[], int b[]);
void multiplication(int a[], int b[]);
int main()
{
    int a[N1]={0}, b[N1]={0}, a1, b1, i, x, j;
    
    scanf("%d",&b1);
    for(i=0; i<b1; i++){
        scanf("%d",&x);
        scanf("%d",&j);
        b[j]=x;
    }
    
    scanf("%d",&a1);
    for(i=0; i<a1; i++){
        scanf("%d",&x);
        scanf("%d",&j);
        a[j]=x;
    }
     
    multiplication(a,b);
    printf("\n");
    addition(a,b);
    
    return 0;
}

void addition(int a[], int b[])
{
    int c[N1], isfirst=0, iszero=0;
    for(int i=0; i<N1; i++)
        c[i]=a[i]+b[i];
    for(int j=N1-1; j>=0; j--)
    {
        if(c[j]!=0){
            iszero++;
            if(isfirst)
                printf(" %d %d",c[j], j);
            if(!isfirst){
                printf("%d %d",c[j], j);
                isfirst=1;
            }
            
        }
    }
    if(iszero==0)
        printf("%d %d",0, 0);
}

void multiplication(int a[], int b[])
{
	int d[N2]={0};
	
	for(int i=0; i<N2; i++){
		if(i<=N1){
			for(int j=0; j<=i; j++)
				d[i]+=a[j]*b[i-j];
		}
		else{
			for(int m=i-N1; m<=N1; m++){
				d[i]+=a[m]*b[i-m];
			}
			
		}	
	}
	
	int isfirst=0, iszero=0;
	for(int j=N2-1; j>=0; j--)
    {
        if(d[j]!=0){
            iszero++;
            if(isfirst)
                printf(" %d %d",d[j], j);
            if(!isfirst){
                printf("%d %d",d[j], j);
                isfirst=1;
            }
            
        }
    }
    if(iszero==0)
        printf("%d %d",0, 0);
	
	
 } 

总结:
1、题目说输入K<1000,由此想到应该用数组。
2、先写加法,此时遇到,条件语句下如何数字间以空格分隔,但开头、结尾不能有多余空格。 可以通过if语句来判断是否是首句输出,引入int isfirst=0;首句打印后isfirst+1。这里挺精彩的。

int isfirst=0, iszero=0;
	for(int j=N2-1; j>=0; j--)
    {
        if(d[j]!=0){
            iszero++;
            if(isfirst)
                printf(" %d %d",d[j], j);
            if(!isfirst){
                printf("%d %d",d[j], j);
                isfirst=1;
            }
            
        }
    }

还要注意,这两个if语句不能换位置,不然满足条件第一个j,两个if会同时执行。
2、乘法。首先用阶次低的多项式在草稿纸上写一下,找规律。发现,乘法结果d[i]=∑a[j]*b[i-j],然后慢慢地调整。分两种情况,i<=1001和1001<i<2001两种情况。
3、原谅小白,用了两个scanf("%d",&x);,scanf可以同时输入两个数据。害,我这该死的基础。冲冲冲!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值