练习专区
今天的一小步就是明天的一大步
Problem 1813 一元多项式的建立
Accepted: 7
Total Submit: 7
Time Limit: 1000ms
Memory Limit: 30720KB
Description
多项式的输出可以写成:12+15x+15x^7+ x^10-5x^17,现在按升幂的方式输入多项式的系数的次数,下列的代码是把多项式建立成链表,然后输出。你的任务是把main()中2行定义变量的语句补上,再对标上(1)(2)……的地方加上注释。
#include
#include
#include//(1)
struct Polynomial
{
int coef;
int exp;
struct Polynomial *next;//(2)
};
struct Polynomial * creat(int n)
{
struct Polynomial *head,*q,*p1;
int i;
p1 = (struct Line*)malloc(sizeof(struct Line));//有错,请改。
head = p1; q=head;
for(i=0;icoef ,&p1->exp );
q->next = p1; q = q->next; //(4)
}
p1->next = NULL;//(5)
return head;
}
void out(struct Polynomial *head)
{
struct Polynomial *p;//(6)
p = head->next;
do
{
if(p->coef>0&&p!=head->next)
{
printf("+");
}
if(p->exp==0)
printf("%d",p->coef);
else if(p->coef==1)
{
printf("x");
if(p->exp!=1)
printf("^%d",p->exp);
}
else if(p->coef==-1)
{
printf("-x");
if(p->exp!=1)
printf("^%d",p->exp);
}
else if(p->exp==1)
printf("%dx",p->coef);
else printf("%dx^%d",p->coef,p->exp);
p=p->next;//(7)
}while(p!=NULL);
}
void main()
{
struct Polynomial *head=NULL;
int n,m,t=1;
scanf("%d",&m);
while(m--)//(8)
{
scanf("%d",&n);
head=creat(n);
printf("Case %d:",t++);
out(head);
printf("\n");
}
}
Input
一开始输入一个整数T(0 < T <= 10),表示要处理T个多项式,接下来有2T行,每两行是一个多项式的输入。先输入一个正整数n表示多项式的项数,后面的2n个数是对应的系数和指数。
Output
每行输出一个多项式,先输出“Case id:”,id是序号,接着按样例输出多项式。
Sample Input
Sample Output
Hint