您的位置:首页 > 其它

1010. 一元多项式求导 (25)

2015-11-23 22:53 330 查看


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;
}
编的很麻烦,先以字符串输入,然后慢慢转化为数字。在网上搜到另一种很简单的方法,但是运行没有结束,提交之后也是对的。[/code]
#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;
}


[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: