UVA - 1586 Molar mass?
题目大意:给一组化学式算出其质量
解题思路:一个一个算就好了
#include <cstdio>
#include <cstring>
#include <cstdlib>
int main() {
char b[100];
char a[100];
int N;
scanf("%d", &N);
getchar();
double s;
while(N--) {
memset(a, 0, sizeof (a));
memset(b, 0, sizeof (b));
s = 0;
gets(a);
for ( int i = 0; i < strlen(a); i++) {
if (a[i] == 'C' ) {
if( a[i+1] > '9' || a[i+1] < '0' )
s = s + 12.01;
else if (a[i+1] >= '0' && a[i+1] <= '9') {
int k ;
b[0] = a[i+1];
for ( k = 1 ; k < strlen(a) - i; k++)
if (a[i+1+k] < '0' || a[i+1+k] > '9') break;
else {b[k] = a[i+1+k];b[k+1] = '\0';}
s = s + 12.01*atoi(b);
i = i + k;
}
}
if (a[i] == 'H' ) {
if( a[i+1] > '9' || a[i+1] < '0' )
s = s + 1.008;
else if (a[i+1] >= '0' && a[i+1] <= '9') {
int k ;
b[0] = a[i+1];
for ( k = 1 ; k < strlen(a) - i; k++)
if (a[i+1+k] < '0' || a[i+1+k] > '9') break;
else {b[k] = a[i+1+k];b[k+1] = '\0';}
s = s + 1.008*atoi(b);
i = i + k;
}
}
if (a[i] == 'O' ) {
if( a[i+1] > '9' || a[i+1] < '0' )
s = s + 16.00;
else if (a[i+1] >= '0' && a[i+1] <= '9') {
int k ;
b[0] = a[i+1];
for ( k = 1 ; k < strlen(a) - i; k++)
if (a[i+1+k] < '0' || a[i+1+k] > '9') break;
else {b[k] = a[i+1+k]; b[k+1] = '\0';};
s = s + 16.00*atoi(b);
i=i + k;
}
}
if (a[i] == 'N' ) {
if( a[i+1] > '9' || a[i+1] < '0' )
s = s + 14.01;
else if (a[i+1] >= '0' && a[i+1] <= '9') {
int k ;
b[0] = a[i+1];
for ( k = 1 ; k < strlen(a) - i; k++)
if (a[i+1+k] < '0' || a[i+1+k] > '9') break;
else {b[k] = a[i+1+k]; b[k+1] = '\0';}
s = s + 14.01*atoi(b);
i=i + k;
}
}
}
printf("%.3lf\n", s);
}
}