1010. 一元多项式求导 (25)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为n*xn-1。)
输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。
输入样例:3 4 -5 2 6 1 -2 0输出样例:
12 3 -10 1 6 0
编的很麻烦,先以字符串输入,然后慢慢转化为数字。在网上搜到另一种很简单的方法,但是运行没有结束,提交之后也是对的。#include<stdio.h> #include<string.h> int main() { struct number{ int a[4];//不超过1000,可以等于1000,所以要用四个数组!之前一直用三个数组,总有一项不对。 int tag; }; char str[10000]; struct number n[1000]; int i,j,k,l,num[1000][2]; gets(str); for(i=0;i<1000;i++) for(j=0;j<4;j++) n[i].a[j]=-1;//初始赋值 for(i=0;i<1000;i++) n[i].tag=1; for(i=0,j=0,k=0;i<strlen(str);i++){ if(str[i]==' ') { if(str[i-1]!=' ')j++; k=0;continue; } if(str[i]=='-'){ n[j].tag=0;i++; } n[j].a[k++]=str[i]-'0'; }//把字符串转化为单个的数和符号 for(i=0,l=-1;i<=j;i++){ if(i%2==0) {k=0;l++;} else k=1; if(n[i].a[1]==-1&&n[i].a[2]==-1&&n[i].a[3]==-1) num[l][k]=n[i].a[0]; else if(n[i].a[1]>-1&&n[i].a[2]==-1&&n[i].a[3]==-1) num[l][k]=n[i].a[0]*10+n[i].a[1]; else if(n[i].a[1]>-1&&n[i].a[2]>-1&&n[i].a[3]==-1) num[l][k]=n[i].a[0]*100+n[i].a[1]*10+n[i].a[2]; else num[l][k]=n[i].a[0]*1000+n[i].a[1]*100+n[i].a[2]*10+n[i].a[3]; if(n[i].tag==0) num[l][k]-=2*num[l][k]; }//把单个的数放进一个二维数组 for(i=0;i<=l;i++){ if(num[i][1]==0){ num[i][0]=0;continue; } num[i][0]*=num[i][1]; num[i][1]-=1; }//进行运算 printf("%d %d",num[0][0],num[0][1]); for(i=1;i<l+1;i++){ if(!num[i][0]&&!num[i][1]); else printf(" %d %d",num[i][0],num[i][1]); }//输出 return 0; }
#include <stdio.h> #include <string.h> int main() { int n, e, flag = 0; while (scanf("%d%d", &n, &e) != EOF) { if( n*e ) { if(flag) printf(" "); else flag = 1; printf("%d %d", n*e, e-1); } } if(!flag) printf("0 0"); return 0; }