emmmm小垃圾的垃圾场

啥都不会的一只小垃圾

#问题求解与编程# 实验一 H 多项式运算

多项式运算

发布时间: 2018年3月20日 22:06   时间限制: 1000ms   内存限制: 128M

描述

据说每一个搞ACM的上辈子都是脑细胞死光钻到牛角尖里出不来的天使哦,可ACMer也会经常遇到些很简单的难题,比如a+b,找数列最大值……bluestone最近就遇到了这样的简单难题,Professor给她出了道一元多项式运算的题,但是bluestone做了一天没能做出来,于是她前来请教在座聪明的各位,看谁最先能帮bluestone解决这个problem??她会灰常感激的哦~

bluestone给大家提个醒:类似以下式子的称为一元多项式:

f(x)=a*x^n+b*x^m+……+k

如果给出x的值,我们马上就能算出f(x)了吧~

输入

输入第一行,是一个整数T(0<T<=100),表示一共有T组测试数据,以下紧跟T组测试数据,每组第一行是一个X(0<=X<=10000),表示X的值;第二行是一个一元多项式,多项式的长度不会超过100。只进行多项式加减运算,保证最后运算的结果始终在int范围内,输入格式请参见样例。

输出

每组测试数据输出占一行,输出最后的结果,具体格式请严格参考样例(注意空格)

样例输入1
2
2
2X^2+3X+1
3
X+1
样例输出1
Case #1:15
Case #2:4

————————————————————————————————————————————————————

这应该是实验一最难的一道压轴了...关键是组合相乘之类的好烦~

以下是标程:

#include<cstring>
char s[110];
int deal(int n,int i,int j)//编写deal 处理情况函数,封装好
{
    if(i>j) return 0;//开头处理特殊情况
    int s1,s2,x;
    s[i]=='X'?s1=1:s1=0;
    for(x=i;s[x]!='X'&&x<=j;x++)//处理系数
        s1=s1*10+s[x]-'0';
    x==j&&s[x]=='X'?s2=1:s2=0;
    for(x=x+2;x<=j;x++)//处理指数
        s2=s2*10+s[x]-'0';
    int s3=1;
    while(s2--)
        s3*=n;
    return s1*s3;
}
int main()
{
    //freopen("data.in","r",stdin);
    //freopen("data.out","w",stdout);
    int t,n,sum,i,start,over,j=0;
    scanf("%d",&t);
    while(t--)
    {
        start=sum=0;
        scanf("%d %s",&n,s);
        int flag=1;//flag来存"+""-",这里用1表示"+",用0表示"-"
        for(i=0;i<strlen(s);i++)
        {
            if(s[i]=='+'||s[i]=='-')
            {
                over=i-1;
                flag?sum+=deal(n,start,over):sum-=deal(n,start,over);
                flag=(s[i]=='-'?0:1);
                start=i+1;
            }
        }
        over=strlen(s)-1;
        flag?sum+=deal(n,start,over):sum-=deal(n,start,over);
        printf("Case #%d:%d\n",++j,sum);
    }
    return 0;
}//有些地方还没看懂.............
阅读更多
上一篇#问题求解与编程# 实验一 G 公司营收
下一篇#问题求解与编程# 实验二 B 质数因子
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭