#include <stdio.h>
#include <string.h>
#include <math.h>
#define W_C 12.01
#define W_H 1.008
#define W_O 16.00
#define W_N 14.01
int ToNum(char *s, int n)
{
int sum = 0;
if(n==0)
{
return sum = 1;
}
else
{
for(int i=0; i<n; i++)
{
sum += (s[i]-'0')*pow(10, n-i-1);
}
}
return sum;
}
int main()
{
int n;
char num[81];
memset(num, '0', sizeof(num));
int cnum = 0;
scanf("%d", &n);
while(n--)
{
float W = 0;
char s[81];
scanf("%s", s);
for(int i=0; i<strlen(s); i++)
{
if(s[i] == 'C')
{
for(int j = i; j<strlen(s); j++)
{
if(s[j+1]>'A' || j==strlen(s)-1)
{
W += W_C*ToNum(num, cnum);
memset(num, '0', sizeof(num));
cnum = 0;
break;
}
else
{
num[cnum++] = s[j+1];
}
continue;
}
}
if(s[i] == 'H')
{
for(int j = i; j<strlen(s); j++)
{
if(s[j+1]>'A' || j==strlen(s)-1)
{
W += W_H*ToNum(num, cnum);
memset(num, '0', sizeof(num));
cnum = 0;
break;
}
else
{
num[cnum++] = s[j+1];
}
continue;
}
}
if(s[i] == 'N')
{
for(int j = i; j<strlen(s); j++)
{
if(s[j+1]>'A' || j==strlen(s)-1)
{
W += W_N*ToNum(num, cnum);
memset(num, '0', sizeof(num));
cnum = 0;
break;
}
else
{
num[cnum++] = s[j+1];
}
continue;
}
}
if(s[i] == 'O')
{
for(int j = i; j<strlen(s); j++)
{
if(s[j+1]>'A' || j==strlen(s)-1)
{
W += W_O*ToNum(num, cnum);
memset(num, '0', sizeof(num));
cnum = 0;
break;
}
else
{
num[cnum++] = s[j+1];
}
continue;
}
}
}
printf("%.3f\n", W);
}
return 0;
}
简单题,其中ToNum函数是一个很好地将连续的字符串数字转化为相应数字的函数。
第一次做:2018.8.12