2256 Artificial Intelligence?

問題概要

テキストが入力として与えられる。
テキスト中に含まれる変数=(数字)(接頭辞)(単位)から、
残りの変数を求めよ。

変数はP(単位W),I(単位A),U(単位V)のいずれか、
接頭辞はm(1/1000),k(1000),M(1000000)のいずれかである。

解法

getlineなどで入力を取って変数の値を調べる。

ソースコード

string in;

int main(){
	int T; cin>>T; cin.ignore();
	rep(S,T){
		getline(cin,in);
		stringstream ss(in);
		double P=-1,U=-1,I=-1;
		
		while(ss>>in){
			int p,q; double d;
			if((p=in.find('='))==string::npos)continue;
			for(q=p;q<in.size();q++)if(isalpha(in[q]))break;
			
			sscanf(in.substr(p+1,q-p-1).c_str(),"%lf",&d);
			if(in[q]=='m')d/=1000;
			else if(in[q]=='k')d*=1000;
			else if(in[q]=='M')d*=1000000;
			
			if(in[0]=='P')P=d;
			else if(in[0]=='I')I=d;
			else if(in[0]=='U')U=d;
			else assert(0);
		}
		printf("Problem #%d\n",S+1);
		if(P<0)printf("P=%.2fW\n",U*I);
		else if(I<0)printf("I=%.2fA\n",P/U);
		else if(U<0)printf("U=%.2fV\n",P/I);
		puts("");
	}
	return 0;
}