#include<stdio.h>
#include<string.h>
#include<map>
#include<ctype.h>
#define maxn 105
using namespace std;
int num(const char* s,int pos,int len){
int num=0;
int q=0;
int temp;
for(int i=pos;i<len;i++){
if(!isalpha(s[i]))
temp=i;
else
break;
}
for(int i=pos;i<=temp;i++){
q=q*10+s[i]-'0';
}
return q;
}
int main(){
map<char,double> mp;
mp['C']=12.01;
mp['H']=1.008;
mp['O']=16;
mp['N']=14.01;
char s[maxn];
int T;
scanf("%d",&T);
while(T--){
scanf("%s",s);
int n=strlen(s);
double sum=0;
for(int k=0;k<n;k++){
if(isalpha(s[k])){
if(isalpha(s[k+1])&&k+1<n)
sum+=mp[s[k]];
else if(!isalpha(s[k+1])&&k+1<n)
sum+=mp[s[k]]*num(s,k+1,n);
else if(k+1==n)
sum+=mp[s[k]];
}
else
continue;
}
printf("%.3lf\n",sum);
}
return 0;
}
#include<string.h>
#include<map>
#include<ctype.h>
#define maxn 105
using namespace std;
int num(const char* s,int pos,int len){
int num=0;
int q=0;
int temp;
for(int i=pos;i<len;i++){
if(!isalpha(s[i]))
temp=i;
else
break;
}
for(int i=pos;i<=temp;i++){
q=q*10+s[i]-'0';
}
return q;
}
int main(){
map<char,double> mp;
mp['C']=12.01;
mp['H']=1.008;
mp['O']=16;
mp['N']=14.01;
char s[maxn];
int T;
scanf("%d",&T);
while(T--){
scanf("%s",s);
int n=strlen(s);
double sum=0;
for(int k=0;k<n;k++){
if(isalpha(s[k])){
if(isalpha(s[k+1])&&k+1<n)
sum+=mp[s[k]];
else if(!isalpha(s[k+1])&&k+1<n)
sum+=mp[s[k]]*num(s,k+1,n);
else if(k+1==n)
sum+=mp[s[k]];
}
else
continue;
}
printf("%.3lf\n",sum);
}
return 0;
}
本文介绍了一个使用 C 语言编写的简单程序,该程序能够解析输入的化学分子式,并计算出分子式的摩尔质量。通过查找预定义的元素及其对应的原子质量,程序能够处理包含多种元素的复杂分子式。
436

被折叠的 条评论
为什么被折叠?



