您的位置:首页 > 其它

UVa - 1586 - Molar mass

2018-02-04 01:45 302 查看
                   


 题解:模拟即可,统计每个原子的个数,可能会有两位数的情况,需要进行特殊处理。

 AC代码:#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 87;
char s[maxn];
int n;
bool check(char a)
{
if(a=='C'||a=='N'||a=='O'||a=='H')return true;
else return false;
}
double getnum(char a)
{
if(a=='C')return 12.01;
if(a=='N')return 14.01;
if(a=='O')return 16.00;
else return 1.008;
}
int main()
{
scanf("%d",&n);
while(n--)
{
int num1,num2,num3,num4;
num1 = num2 = num3 = num4 = 0;
scanf("%s",s);
int leng = strlen(s);
double last;
double sum = 0.0;
for(int i=0;i<leng;i++)
{
if(check(s[i]))
{
last=getnum(s[i]);
sum+=last;
}
else
{
int num = 0;
int lanum = 0;
while(!check(s[i]))
{
num = s[i]-'0';
lanum = lanum*10+num;
i++;
if(i==leng)break;
}
i--;
sum+=last*(lanum-1);
}
}
printf("%.3f\n",sum);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: