Follows 537.c (Total 83 lines):

/* @JUDGE_ID:4461XX 537 C */
/* A */
#include<math.h>
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>
char arr[100] ;
struct pow{
	char name ;
	double number ;
	int perfix ;
	char unit ;
}po[3] ;
struct per{
	char name ;
	int per ;
}per[3] ;
void put( void )
{
	int i ;
	po[0].name = 'P' ; po[0].unit = 'W' ; per[0].name = 'm' ; per[0].per = -3 ;
	po[1].name = 'U' ; po[1].unit = 'V' ; per[1].name = 'k' ; per[1].per = 3 ;
	po[2].name = 'I' ; po[2].unit = 'A' ; per[2].name = 'M' ; per[2].per = 6 ;
	for( i=0 ; i<3 ; i++ ){
		po[i].number = 0.0 ;
		po[i].perfix = 0 ;
	}
}
int take( int i )
{
	int j , k , l , m ;
	char money[100] ;
	for( j=0 ; j<3 ; j++ )
		if( po[j].name == arr[i] ){
			for( k=i+2 , l=0 ; ; k++ )
				if( isdigit( arr[k] ) || arr[k] == '.' ) money[l++] = arr[k] ;
				else break ;
			money[l] = NULL ;
			po[j].number = atof( money ) ;
			for( m=0 ; m<3 ; m++ )
				if( arr[k] == per[m].name ){
					po[j].perfix = per[m].per ;
					l++ ;
					break ;
				}
			break ;
		}
	return l ;
}
void print( double i , int j )
{
	printf( "%c=%.2f%c\n\n" , po[j].name , i , po[j].unit ) ;
}
void count( int i )
{
	switch ( i ){
		case 0 : print( po[1].number*pow(10,po[1].perfix)*po[2].number*pow(10,po[2].perfix) , 0 ) ;
					break ;
		case 1 : print( (po[0].number*pow(10,po[0].perfix))/(po[2].number*pow(10,po[2].perfix)) , 1 ) ;
					break ;
		case 2 : print( (po[0].number*pow(10,po[0].perfix))/(po[1].number*pow(10,po[1].perfix)) , 2 ) ;
					break ;
	}
}
void main( void )
{
	int n , i , j ;
/*	freopen( "C:\\windows\\desktop\\537.in" , "r" , stdin ) ;*/
	scanf( "%d\n" , &n ) ;
	for( i=1 ; i<=n ; i++ ){
		printf( "Problem #%d\n" , i ) ;
		gets( arr ) ;
		put() ;
		for( j=0 ; j<strlen( arr ) ; j++ )
			if( arr[j] == '=' ) j += take( j-1 ) ;
		for( j=0 ; j<3 ; j++ )
			if( po[j].number == 0.0 ){
				count( j ) ;
				break ;
			}
	}
}

Back to statistics
Ya-Lin Huang (C)
huangyl@gmail.com