uva 537 Artificial Intelligence?

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid;=8&page;=show_problem&problem;=478 题意:给出一段文字。。其中包含了 P,U,I(功率,电压,电流)中的两个。。求第三个。 思路:字符串处理。。第一次用vim复制整段代码。。命令模式下按v,然后光标扫过的区域都会选中,按y就就复制到剪贴板了。。 所以虽然代码写了300行但只有100行是需要写的。。200行复制改下就好== WA了两次。。一次是因为I写成了小写。。另一次是因为多组数据记得初始化多次。

/* ***********************************************
Author :111qqz
Created Time :2016年01月22日 星期五 03时25分16秒
File Name :code/uva/537.cpp
************************************************ */
 1#include <cstdio>
 2#include <cstring>
 3#include <iostream>
 4#include <algorithm>
 5#include <vector>
 6#include <queue>
 7#include <set>
 8#include <map>
 9#include <string>
10#include <cmath>
11#include <cstdlib>
12#include <ctime>
13#define fst first
14#define sec second
15#define lson l,m,rt<<1
16#define rson m+1,r,rt<<1|1
17#define ms(a,x) memset(a,x,sizeof(a))
18typedef long long LL;
19#define MP make_pair
20using namespace std;
21const double eps = 1E-8;
22const int dx4[4]={1,0,0,-1};
23const int dy4[4]={0,-1,1,0};
24const int inf = 0x3f3f3f3f;
25string str;
26char cstr[20];
27double i,p,u;
28int pu,pp;
29int pi;
30int pv,pw,pa;
31int beishu;
32string tmp;
33int main()
34{
35	#ifndef  ONLINE_JUDGE 
36	freopen("code/in.txt","r",stdin);
37  #endif
38	int T;
39	int cas = 0;
40	cin>>T;
41	getchar();
42	while (T--)
43	{
44	    beishu = 0;  //多组数据。。。忘记每次都初始化==
45	    printf("Problem #%d\n",++cas);
46	    getline(cin,str);
47//	    cout<<"str:"<<str<<endl;
48	    pu=str.find("U=");
49	    pi=str.find("I=");
50	    pp=str.find("P=");
51//	    cout<<"pi:"<<pi<<" pu:"<<pu<<" pp:"<<pp<<endl;
52	    if (pp==-1)
53	    {
54		pv=str.find('V',pu+1);
55		pa=str.find('A',pi+1);
 1		if (str[pv-1]=='m'||str[pv-1]=='k'||str[pv-1]=='M')
 2		{
 3		    if (str[pv-1]=='m')
 4		    {    
 5			beishu-=3;
 6			tmp = str.substr(pu+2,pv-pu-3);
 7		    }
 8		    if (str[pv-1]=='k')
 9		    {
10			beishu+=3;
11			tmp = str.substr(pu+2,pv-pu-3);
12		    }
13		    if (str[pv-1]=='M')
14		    {
15			beishu+=6;
16			tmp = str.substr(pu+2,pv-pu-3);
17		    }
18		}
19		else
20		{
21		    tmp = str.substr(pu+2,pv-pu-2);
22		}
 1		strcpy(cstr,tmp.c_str());
 2		sscanf(cstr,"%lf",&u);
 3//		cout<<"u:"<<u<<endl;
 4		if (str[pa-1]=='m'||str[pa-1]=='k'||str[pa-1]=='M')
 5		{
 6		    if (str[pa-1]=='m')
 7		    {
 8			beishu-=3;
 9			tmp = str.substr(pi+2,pa-pi-3);
10		    }
11		    if (str[pa-1]=='k')
12		    {
13			beishu+=3;
14			tmp = str.substr(pi+2,pa-pi-3);
15		    }
16		    if (str[pa-1]=='M')
17		    {
18			beishu+=6;
19			tmp = str.substr(pi+2,pa-pi-3);
20		    }
21		}
22		else
23		{
24		    tmp = str.substr(pi+2,pa-pi-2);
25		}
26		strcpy(cstr,tmp.c_str());
27		sscanf(cstr,"%lf",&i);
28//		cout<<"i:"<<i<<endl;
 1		p = 1.0;
 2		if (beishu<0)
 3		{
 4		    for ( int i = 1 ; i <= abs(beishu) ; i++)
 5		    {
 6			p = p*0.1;
 7		    }
 8		}
 9		else
10		{
11		    for ( int i = 1 ; i <= beishu ; i++)
12		    {
13			p = p * 10;
14		    }
15		}
16		p = p*u*i;
17		printf("P=%.2fW\n",p);
18	    }
19	    if (pi==-1)
20	    {
21		pv = str.find('V',pu+1);
22		pw = str.find("W",pp+1);
23		if (str[pv-1]=='m'||str[pv-1]=='k'||str[pv-1]=='M')
24		{
25		    if (str[pv-1]=='m')
26		    {    
27			beishu+=3;
28			tmp = str.substr(pu+2,pv-pu-3);
29		    }
30		    if (str[pv-1]=='k')
31		    {
32			beishu-=3;
33			tmp = str.substr(pu+2,pv-pu-3);
34		    }
35		    if (str[pv-1]=='M')
36		    {
37			beishu-=6;
38			tmp = str.substr(pu+2,pv-pu-3);
39		    }
40		}
41		else
42		{
43		    tmp = str.substr(pu+2,pv-pu-2);
44		}
1		strcpy(cstr,tmp.c_str());
2		sscanf(cstr,"%lf",&u);
3//		cout<<"u:"<<u<<endl;
 1		if (str[pw-1]=='m'||str[pw-1]=='k'||str[pw-1]=='M')
 2		{
 3		    if (str[pw-1]=='m')
 4		    {
 5			beishu-=3;
 6			tmp = str.substr(pp+2,pw-pp-3);
 7		    }
 8		     if (str[pw-1]=='k')
 9		    {
10			beishu+=3;
11			tmp = str.substr(pp+2,pw-pp-3);
12		    }
13		    if (str[pw-1]=='M')
14		    {
15			beishu+=6;
16			tmp = str.substr(pp+2,pw-pp-3);
17		    }
1		}
2		else
3		{
4		    tmp = str.substr(pp+2,pw-pp-2);
5		}
1		strcpy(cstr,tmp.c_str());
2		sscanf(cstr,"%lf",&p);
3//		cout<<"p:"<<p<<endl;
 1		i=1.0;
 2		if (beishu<0)
 3		{
 4		    for ( int i = 1 ; i <=abs(beishu) ; i++)
 5		    {
 6			i=i*0.1;
 7		    }
 8		}
 9		else
10		{
11		    for ( int i = 1 ; i <= beishu ; i++)
12		    {
13			i=i*10;
14		    }
15		}
16		i = i*p/u;
17		printf("I=%.2fA\n",i);	
18	    }
 1	    if (pu==-1)
 2	    {
 3		pa = str.find('A',pi);
 4		pw = str.find('W',pp);
 5		if (str[pa-1]=='m'||str[pa-1]=='k'||str[pa-1]=='M')
 6		{
 7		    if (str[pa-1]=='m')
 8		    {
 9			beishu+=3;
10			tmp = str.substr(pi+2,pa-pi-3);
11		    }
12		    if (str[pa-1]=='k')
13		    {
14			beishu-=3;
15			tmp = str.substr(pi+2,pa-pi-3);
16		    }
17		    if (str[pa-1]=='M')
18		    {
19			beishu-=6;
20			tmp = str.substr(pi+2,pa-pi-3);
21		    }
22		}
23		else
24		{
25		    tmp = str.substr(pi+2,pa-pi-2);
26		}
27		strcpy(cstr,tmp.c_str());
28		sscanf(cstr,"%lf",&i);
29//		cout<<"i:"<<i<<endl;
 1		if (str[pw-1]=='m'||str[pw-1]=='k'||str[pw-1]=='M')
 2		{
 3		    if (str[pw-1]=='m')
 4		    {
 5			beishu-=3;
 6			tmp = str.substr(pp+2,pw-pp-3);
 7		    }
 8		     if (str[pw-1]=='k')
 9		    {
10			beishu+=3;
11			tmp = str.substr(pp+2,pw-pp-3);
12		    }
13		    if (str[pw-1]=='M')
14		    {
15			beishu+=6;
16			tmp = str.substr(pp+2,pw-pp-3);
17		    }
1		}
2		else
3		{
4		    tmp = str.substr(pp+2,pw-pp-2);
5		}
1		strcpy(cstr,tmp.c_str());
2		sscanf(cstr,"%lf",&p);
3//		cout<<"p:"<<p<<endl;
 1		u = 1;
 2		if (beishu<0)
 3		{
 4		    for ( int i = 1 ; i <=abs(beishu) ; i++)
 5		    {
 6			u *=0.1;
 7		    }
 8		}
 9		else
10		{
11		    for ( int i = 1 ; i <= beishu ; i++)
12		    {
13			u *=10;
14		    }
15		}
16		u = u*p/i;
17		printf("U=%.2fV\n",u);
	    }
	    printf("\n");


	}
1  #ifndef ONLINE_JUDGE  
2  fclose(stdin);
3  #endif
4    return 0;
5}