法一:
#include<iostream>
using namespace std;
int main()
{
double d[200];
int n,sum,i;
double w;
char c,a[1000];
d['C']=12.01;
d['H']=1.008;
d['O']=16.00;
d['N']=14.01;
cin>>n;
while(n--)
{
i=0;
w=0;
cin>>a;
while(a[i]!='\0')
{
sum=0;
c=a[i];
i++;
//往后读数字
while(a[i]>='0'&&a[i]<='9')
{
sum=sum*10+a[i]-'0';
i++;
}
if(sum)
w+=sum*(d[c]);
else
w+=(d[c]);
}
printf("%.3f\n",w);
}
return 0;
}
法二:
#include<stdio.h>
#include<string.h>
int main()
{
int t,i,num;
char a[]={'C','H','O','N'};
double n[]={12.01,1.008,16.00,14.01};//此所谓之常量数组的妙用
char s[105];
double sum;
scanf("%d",&t);
while(t--)
{
sum=0;//每次多组数据输入时sum复位
scanf("%s",s);
for(i=0;i<strlen(s);i++)
{
if(s[i+1]>='0'&&s[i+1]<='9')//字符后面带数字
{
if(s[i+2]>='0'&&s[i+2]<='9')//带了两位数字
{
num=10*(s[i+1]-'0')+(s[i+2]-'0');
}
else//带了一位数字
num=s[i+1]-'0';
}
else//不带数字
num=1;
if(s[i]==a[0]) sum += num*n[0];
else if(s[i]==a[1]) sum += num*n[1];
else if(s[i]==a[2]) sum += num*n[2];
else if(s[i]==a[3]) sum += num*n[3];
}
printf("%.3f\n",sum);
}
return 0;
}