HDU3347 Calculate the expression

题目链接

#include<cstdio>
#include<cstring>
using namespace std;

struct abc
{
    int num;
    char s[25];
}abc[1000000];

int change(int len, char s[] )
{
    int ans=0, a, b, c=1;
    if(s[0]=='-')
    {
        for(int i=len-1; i>0; i--)
        {
            a=(s[i]-'0')*c;
            ans+=a;
            c*=10;
        }
        return -ans;
    }
    for(int i=len-1; i>=0; i--)
    {
        a=(s[i]-'0')*c;
        ans+=a;
        c*=10;
    }
    //printf("ch ans = %d\n", ans);
    return ans;
}
int main()
{
    int t, n, ans=0;
    char z, k[25];
    scanf("%d", &t);
    while(t--)
    {
        memset(k, 0, sizeof(k));
        ans=0;
        scanf("%d", &n);
        for(int i=0; i<n-1; i++)
        {
            scanf("%s = %d", abc[i].s, &abc[i].num);
            //printf("%s =  %d\n",abc[i].s,abc[i].num );
        }
        scanf("%s", k);
        if(k[0]>='a' && k[0]<='z')
        {
            for(int i=n-1; i>=0; i--)
            {
                if(k[0]!=abc[i].s[0])
                    continue;
                else if(!strcmp(k, abc[i].s))
                {
                        ans+=abc[i].num;//printf("abc[i].num= %d\n",abc[i].num );
                    break;
                }
            }
        }
        else
        {//printf("csdcasd\n");
            int len=strlen(k);
            int ch=change(len, k);
            ans+=ch;
        }//printf("1.ans= %d\n", ans);
        while(scanf(" %c %s", &z, k))
        {
            if(z=='=')
                break;
            if(k[0]>='a' && k[0]<='z')
            {
                for(int i=n-1; i>=0; i--)
                {
                    if(k[0]!=abc[i].s[0])
                        continue;
                    else if(!strcmp(k, abc[i].s))
                    {
                        if(z=='+')
                            ans+=abc[i].num;//printf("abc[i].num= %d\n",abc[i].num );
                        else
                            ans-=abc[i].num;//printf("abc[i].num= %d\n",abc[i].num );
                        break;
                    }
                }
            }
            else
            {//printf("csdcasd\n");
                int len=strlen(k);
                int ch=change(len, k);
                if(z=='+')
                    ans+=ch;
                else
                    ans-=ch;
            }

        }
        //scanf("%c", &z);
        printf("%d\n", ans);

    }
    return 0;
}

先输入变量名即其对应的值, 用结构体数组储存;
然后输入要求解的表达式(数字、字符都当做字符输入), 判断输入的是数字还是变量名, 如果是变量名则用ans加上变量名对应的数值, 如果是数值则把数字字符转化成数值;
判断输入的是+还是-(一开始忘记了-的情况)
输入’=’时结束。

因为没理解透题意, 边写边想, 浪费了较多时间, 中间一些低级错误也浪费了很多时间

猜你喜欢

转载自blog.csdn.net/liudazhuang98/article/details/79595576
今日推荐