解题报告_18.5.30_POJ_1472_0

本文介绍了一种将字符串转换为整数的算法,并通过具体的C++实现代码详细展示了这一过程。此外,还提供了一个复杂的计算器程序示例,该程序能够处理包含循环、加法等操作的表达式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自:https://blog.youkuaiyun.com/lyy289065406/article/details/6648640
#include<iostream>  
using namespace std;  
  
/*字符串转数字*/  
int StrToNum(char* s)  
{  
    int digit=0;  
    for(int i=0;s[i];i++)  
        digit=digit*10+(s[i]-'0');  
  
    return digit;  
}  
  
bool solve(int* exp)  
{  
    char s[30];  
    cin>>s;  
  
    if(s[0]=='E')    //END  
        return false;  
    else if(s[0]=='B')  //BEGIN  
        while(solve(exp));   //若因为OP返回,则继续;若因为END返回,则结束  
    else if(s[0]=='O')  //0P  
    {  
        cin>>s;  
        exp[0]+=StrToNum(s);  
        return solve(exp);  
    }  
    else     //LOOP  
    {  
        int TempExp[11]={0};  //临时exp[]  
        cin>>s;  
        while(solve(TempExp));  
  
        if(s[0]=='n')   //LOOP n  
        {  
            for(int i=10;i>0;i--)  
                TempExp[i]=TempExp[i-1];  //表达式乘以n,则所有项的次数+1  
            TempExp[0]=0;  
        }  
        else  //LOOP Num  
        {  
            int x=StrToNum(s);  
            for(int i=0;i<11;i++)  
                TempExp[i]*=x; //表达式乘以const,则所有项的系数*const  
        }  
        for(int i=0;i<11;i++)  
            exp[i]+=TempExp[i];  
    }  
    return true;  
}  
  
int main(void)  
{  
    int test;  
    cin>>test;  
    for(int t=1;t<=test;t++)  
    {  
        char s[6];  
        int exp[11]={0};  //指数为i的项,其系数为exp[i]  
  
        solve(exp);  
  
        cout<<"Program #"<<t<<endl;  
        cout<<"Runtime = ";  
  
        bool flag=false;  
        bool before=false;  //标记输出当前项之前,是否输出过前面的项  
        for(int i=10;i>=0;i--)  
            if(exp[i])   //当系数不为0时,才输出该项  
            {  
                flag=true;  
  
                if(before)  
                {  
                    cout<<'+';  
                    before=false;  
                }  
  
                if(!i)  //当指数为0时,直接输出系数  
                {  
                    cout<<exp[i];  
                    before=false;  
                }  
                else  
                {  
                    bool sign=false;  //标记系数是否为1  
                    if(i && exp[i]!=1)  
                    {  
                        sign=true;  
                        cout<<exp[i];  
                        before=true;  
                    }  
                    if(i)  //当指数不为0时  
                    {  
                        if(sign)  
                            cout<<'*';  
                        cout<<'n';  
                        if(i!=1)  
                            cout<<'^'<<i;  
                        before=true;  
                    }  
                }  
            }  
        if(!flag)  
            cout<<0<<endl<<endl;  
        else  
            cout<<endl<<endl;  
    }  
    return 0;  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值