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;}