题目大意:从字符串中读取信息,然后根据公式计算

解题思路:从字符串中提取信息,并保存和标记,然后在根据公式进行计算

#include<cstdio>
#include<cmath>
#include<cstring>

double find_n(char *str, int i) {
	int count = 0;
	double recode[20];
	double times = 1;
	double  ren_n = 0;
	int number = 0;
	int mark = 0;
	double sign = 1;
	int start = 2;
	if(str[i+2] == '-') { 
		sign = -1;
		start++;
	}
	for(int j = i + start; ; j++) {
		if(str[j] >= '0' && str[j] <= '9') {
			recode[count] = str[j] - '0';
			count++;
			if(mark == 1) 
				number--;	
		}
		if(str[j] == '.')
		{
			mark = 1;
			continue;		
		}

		if(str[j] == 'k')	{

			times = 1000;
			break;
		}
		if(str[j] == 'M') {

			times = 1000000;
			break;	
		}
		if(str[j] == 'm') {

			times = 0.001;
			break;
		}
		if(str[j] == 'A' || str[j] == 'V' || str[j] == 'W')	
			break;
	}
	int j;
	double k;
	for( j = count - 1 , k = pow(10,number); j >= 0; j--, k = k * 10) {
		ren_n = ren_n + recode[j] * k;
	}
	return ren_n * times * sign;
}

void put(double *num, int *mark, int count) {
	double end;
	if(mark[0] == 1 && (mark[1] == 2 || mark[1] == 3))
		end = num[0] / num[1];
	if(mark[1] == 1 && (mark[0] == 2 || mark[0] == 3))
		end = num[1] / num[0];
	if( (mark[1] == 2 && mark[0] == 1) || (mark[0] == 2 && mark[1] == 1))
		printf("Problem #%d\nI=%.2fA\n\n", count, end);
	if( (mark[1] == 3 && mark[0] == 1) || (mark[0] == 3 && mark[1] == 1))
		printf("Problem #%d\nU=%.2fV\n\n", count, end);
	if((mark[0] == 2 && mark[1] == 3) || (mark[1] == 2 && mark[0] == 3))
		printf("Problem #%d\nP=%.2fW\n\n", count, num[1] * num[0]);
}


int main() {
	int mark[2];
	int number;
	int send = 0;
	char str[100];
	double  num[2];
	int count ;
	scanf("%d\n",&number);
	for(int L= 1; L <= number; L++) { 
		gets(str);
		count = 0;	
		for(int i = 0; i < strlen(str); i++) {
			if(str[i + 1] == '=' && (str[i] == 'U' || str[i] == 'I' || str[i] == 'P') ) {
				if(str[i] == 'U' ) 
					mark[count] = 2;
				if(str[i] == 'I' )	
					mark[count] = 3;
				if(str[i] == 'P'  )	
					mark[count] = 1;	
				num[count] = find_n(str,i -1);
				count++;

			}	
		}
		put(num,mark,L);
	}
	return 0;

}