Artificial Intelligence? 编码好题!

来源:互联网 发布:java socket 语音聊天 编辑:程序博客网 时间:2024/06/05 10:18

/*稍有繁琐。先确定=号,再确定单位。判断单位的前一个字符是否为前缀。然后确定数字的范围。用atof将范围内的字符串放到一个字符数组里,再将其转化为数字。*/#include <iostream>#include <stdio.h>#include <string.h>#include <stdlib.h>using namespace std;int main(){    char s[550];    double a=1,b=1;    char q1,q2,w;    int t;    while(scanf("%d",&t)==1)    {        int cases=1;        while(t--)        {            getchar();            gets(s);            bool ret1=false;            char c[500];            printf("Problem #%d\n",cases++);            for(int i=0; i<strlen(s); i++)            {                if(s[i]=='='&&ret1==false)                {                    q1=s[i-1];                    int j=i;                    while(s[j]!='A'&&s[j]!='W'&&s[j]!='V')                        j++;                    ret1=true;                    w=s[j-1];                    int h=0;                    bool pp=false;                    if(w!='m'&&w!='M'&&w!='k')                    {                        for(int k=i+1; k<j; k++)                            c[h++]=s[k];                        c[h++]='\0';                        a=atof(c);                    }                    else                    {                        for(int k=i+1; k<j-1; k++)                            c[h++]=s[k];                        c[h++]='\0';                        a=atof(c);                        if(w=='m') a=a/1000.0;                        else if(w=='k') a=a*1000.0;                        else if(w=='M') a=a*1000000.0;                    }                }                if(s[i]=='='&&ret1)                {                    q2=s[i-1];                    int j=i;                    while(s[j]!='A'&&s[j]!='W'&&s[j]!='V')                        j++;                    w=s[j-1];                    int h=0;                    bool pp=false;                    if(w!='m'&&w!='M'&&w!='k')                    {                        for(int k=i+1; k<j; k++)                            c[h++]=s[k];                        c[h++]='\0';                        b=atof(c);                    }                    else                    {                        for(int k=i+1; k<j-1; k++)                            c[h++]=s[k];                        c[h++]='\0';                        b=atof(c);                        if(w=='m') b=b/1000.0;                        else if(w=='k') b=b*1000.0;                        else if(w=='M') b=b*1000000.0;                    }                }            }            if(q1=='U'&&q2=='I') printf("P=%.2lfW\n",a*b);            if(q1=='I'&&q2=='U') printf("P=%.2lfW\n",a*b);            if(q1=='U'&&q2=='P') printf("I=%.2lfA\n",b/a);            if(q1=='P'&&q2=='U') printf("I=%.2lfA\n",a/b);            if(q1=='I'&&q2=='P') printf("U=%.2lfV\n",b/a);            if(q1=='P'&&q2=='I') printf("U=%.2lfV\n",a/b);            printf("\n");        }    }    return 0;}