多项式乘法程序
一个学期才4个实验,太少了吧,边打炉石边写程序花了三四天把四个实验水完了,代码放上供大家参考
由于全程使用的C语言,加上写的很随意,代码优化的空间很大,有很多冗余的代码,只不过写完了就当交差了
实验题目:多项式乘法问题 实验目的:设计一个一元稀疏多项式简单计算器。实验内容与要求 一元稀疏多项式简单计算器的基本功能是: 1.输入并建立多项式;
- 输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,…,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列。
- 多项式a与多项式b相乘,建立多项式。
代码思路
完整代码
#include "stdio.h"
#include "stdlib.h"
#define N 1000
typedef struct muls
{
int val[N];
int idx[N];
int ne[N];
int head;
int cnt;
}mul;
mul *eq1;
mul *eq2;
mul *res;
void get_mul(mul *v,int n);
void read();
void times(mul *x,mul *y);
void insert_k(mul *m,int v,int i,int k);
void insert(mul *m,int v,int i);
void init();
int main()
{
init();
read();
}
void init()
{
eq1= (mul *)(malloc(sizeof(mul)));
eq2=(mul *)(malloc(sizeof (mul)));
res=(mul *)(malloc(sizeof (mul)));
eq1->cnt=0;
eq1->head=-1;
eq2->cnt=0;
eq2->head=-1;
res->cnt=0;
res->head=-1;
}
void read()
{
printf("欢迎使用一元多项式简易计算器\n");
printf("输入格式为系数 指数 (回车键结束)\n");
printf("下面请输入第一个多项式:\n");
printf("你输入的多项式项数为:\n");
int n=0;
scanf("%d",&n);
get_mul(eq1,n);
printf("输入第二个多项式:\n");
printf("你输入的多项式项数为:\n");
scanf("%d",&n);
get_mul(eq2,n);
printf("计算结果如下:\n");
times(eq1,eq2);
int t=res->head;
while(t!=-1)
{
printf("%d %d\n",res->val[t],res->idx[t]);
t=res->ne[t];
}
}
void times(mul *x,mul *y)
{
int x_t=x->head;
while(x_t!=-1)
{
int x_val=x->val[x_t];
int x_idx=x->idx[x_t];
x_t=x->ne[x_t];
int y_t=y->head;
while(y_t!=-1)
{
int y_val=y->val[y_t];
int y_idx=y->idx[y_t];
int res_val=x_val*y_val;
int res_idx=x_idx+y_idx;
y_t=y->ne[y_t];
insert(res,res_val,res_idx);
}
}
}
void get_mul(mul *v,int n)
{
while(n--)
{
int a, b;
scanf("%d %d",&a,&b);
insert(v,a,b);
}
}
void Head(mul *m,int v,int i)
{
int c=m->cnt;
m->val[c]=v;
m->idx[c]=i;
m->ne[c]=m->head;
m->head=m->cnt++;
}
int search(mul *m,int v,int i)
{
int t=m->head;
while(t!=-1) {
if (m->idx[t] == i) {
m->val[t] += v;
return 1;
}
t = m->ne[t];
}
return 0;
}
void insert(mul *m,int v,int i)
{
if(search(m,v,i)==0)
{
int t=m->head;
if(m->idx[t]<i)
{
Head(m, v, i);
return;
}
while(t!=-1)
{
int la=t;
t = m->ne[t];
if(m->idx[t]<i)
{
insert_k(m,v,i,la);
return;
}
}
insert_k(m,v,i,t);
return;
}
}
void insert_k(mul *m,int v,int i,int k)
{
m->cnt++;
int c=m->cnt;
int x=m->ne[k];
m->ne[k]=c;
m->val[c]=v;
m->idx[c]=i;
m->ne[c]=x;
}
运行截图
|