题目链接:https://vjudge.net/problem/51477/origin
继续紫书刷题,这道题考察字符串,遍历字符串,遇见数字,字母分别处理即可。要细心!
#include <ctype.h>
#include <string.h>
#include <math.h>
double Judge(char ch) {
if(ch=='C')
return 12.01;
else if(ch=='H')
return 1.008;
else if(ch=='O')
return 16.00;
else if(ch=='N')
return 14.01;
}
double Sum(char str[]) {
double sum = 0;
char ch;
for(int i = 0; str[i]!='\0'; ) {
double num = 0, j = 0;
int flag = 0;
if(isalpha(str[i]))
sum += Judge(str[i++]);
while(isdigit(str[i])) {
if(flag==0) {
ch = str[i-1];
flag = 1;
}
num = num*pow(10,j) + (str[i]-'0');
j++;
i++;
}
if(num!=0)
sum += (num-1)*Judge(ch);
}
return sum;
}
int main() {
//freopen("i.txt","r", stdin);
int n;
scanf("%d",&n);
char str[150];
for(int i = 0; i < n; i++) {
scanf("%s",str);
printf("%.3lf\n",Sum(str));
}
return 0;
}