UvaOJ 537 - Artificial Intelligence?

23 篇文章 0 订阅
11 篇文章 0 订阅

题目

字符串处理

有个地方不知道为什么那样会wa,详见注释。


另外我采用的是一行读入,然后进行字符串parse,比较麻烦。

可以采用istringstream或sscanf等,从字符串再进行格式化读入,比较好。参考:http://www.cnblogs.com/shixuehunk/archive/2011/07/22/2113728.html  、 http://www.cppblog.com/rakerichard/archive/2011/04/07/143608.html


代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<iomanip>
using namespace std;

double P, I, U;

double cal(int p, int i, int u)
{
    if(!u) return P/I;
    else if(!p) return U*I;
    else if(!i) return P/U;
}
double s2d(string s)
{
    double ret = 0.0;
    int ispre = 0;
    int isdot = 0;
    int dot = 1;
    for(int i=0; i<(int)s.length(); i++)
    {
        if(s[i]=='m' || s[i]=='k' || s[i]=='M') { ispre=1; break; }
        if(s[i] == '.') { isdot = 1; continue; }
        if(isdot) dot*=10;
        ret = ret*10+s[i]-'0';
    }
    ret/=(double)dot;
    if(ispre)
    {
        switch(s[s.length()-1])
        {
        case 'm': ret/=1000; break;
        case 'k': ret*=1000; break;
        case 'M': ret*=1000000; break;
        }
    }
    return ret;
}
int isp, isi, isu;
double solve(string s)
{
    isp=0, isi=0, isu=0;
    int p1 = s.find("U=", 0);
    int p2 = s.find("I=", 0);
    int p3 = s.find("P=", 0);
    if(p1 != -1)
    {
        isu = 1;
        int p = s.find('V', p1);
        string t = s.substr(p1+2, p-p1-2);
        U = s2d(t);
    }
    if(p2 != -1)
    {
        isi = 1;
        int p = s.find('A', p2);
        string t = s.substr(p2+2, p-p2-2);
        I = s2d(t);
    }
    if(p3 != -1)
    {
        isp = 1;
        int p = s.find('W', p3);
        string t = s.substr(p3+2, p-p3-2);
        P = s2d(t);
    }
    return cal(isp, isi, isu);
}
int main()
{
    int t; cin>>t;
    cin.get();
    for(int i=1; i<=t; i++)
    {
        string s;
        getline(cin, s);
        cout<<"Problem #"<<i<<endl;
        /*                              用cout,直接输出函数返回值,WA
        if(!isp) cout<<"P";
        else if(!isi) cout<<"I";
        else if(!isu) cout<<"U";
        cout<<"="<<setiosflags(ios::fixed)<<setprecision(2)<<solve(s);
        if(!isp) cout<<"W";
        else if(!isi) cout<<"A";
        else if(!isu) cout<<"V";
        cout<<endl;
        cout<<endl;
        */                             // 用cout,先把函数返回值赋给ans,再输出ans,AC
        double ans = solve(s);
        if(!isp) cout<<"P";
        else if(!isi) cout<<"I";
        else if(!isu) cout<<"U";
        cout.setf(ios::fixed);
        cout.precision(2);
        cout<<"="<<ans;
        if(!isp) cout<<"W";
        else if(!isi) cout<<"A";
        else if(!isu) cout<<"V";
        cout<<endl;
        cout<<endl;
        /*                                      用 printf AC。
        double ans = solve(s);
        if(!isp) printf("P=%.2fW\n", ans);
        else if(!isi) printf("I=%.2fA\n", ans);
        else if(!isu) printf("U=%.2fV\n", ans);
        printf("\n");
        */
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值