[模拟字符串] [洛谷] P2788 数学1(math1)- 加减算式

水题一道 也是第一篇博客 

欢迎大牛来喷

思路非常简单 

把字符串拆为单个数字 譬如算式1+2-3+1998可以拆为1,+2,-3,+1998

将各个数字单独转换为int型 

最后求和

#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
char a[60010];//注意字符串范围
int main()
{
    cin>>a;
    int flag=strlen(a)-1,tmp,ts=0;
    long long sum=0;
    while(flag>=0)
    {
        tmp=flag;
        for(flag;flag>=0&&a[flag]>='0'&&a[flag]<='9';flag--);//从后遍历 flag是符号下标 flag+1是数字第一位下标 tmp是数字最后一位下标
        for(int i=tmp,j=0;i>flag;i--,j++)
        {
            ts+=(a[i]-'0')*pow(10,j);//将字符型数转换为整形数字和
        }
        if(a[flag]=='-') //注意 如果flag=0时要么是数字要么是 - 号 不会有正号 正数直接交给else处理
            sum-=ts;
        else
            sum+=ts;
        ts=0;
        flag--;
    }
    cout<<sum<<endl;
    return 0;
}
原文地址:https://www.cnblogs.com/zeolim/p/12270820.html