UvaOJ 537 – Artificial Intelligence?

來源:互聯網
上載者:User

題目

字串處理

有個地方不知道為什麼那樣會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");        */    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.