解题报告UVA1586
小紫书上的此题比较简单…只是,有一些需要注意的
- 有没有注意到如果不是0 ~ 9,而是10 ~ 100甚至更多位数字呢?是否就计算不能?这里就需要判断数字是否连续…
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
char s[100];
float n=0,m=0,sum=0;
cin>>s;
for(int i=0;i<strlen(s);i++)
{
if(s[i]>='A'&&s[i]<='Z') //
{
if(s[i]=='C')
n=12.01;
else if(s[i]=='H')
n=1.008;
else if(s[i]=='O')
n=16.00;
else if (s[i]=='N')
n=14.01;
m=0;//
}
while(isdigit(s[i])) //判断当前字符是否为数字
{
m=m*10+s[i]-'0';
if(!isdigit(s[i+1])) //判断下一个字符是否为数字,若是则跳出,为了多位数字的计算也能兼容
{
break;
}
else
i++;
}
if(m!=0) //元素后面的字符
sum+=m*n;
else if((s[i+1]>='A'&&s[i+1]<='Z')||i==strlen(s)-1) //判断下一个字符是否为字符 OR 下一个字符是否为最后一个字符
sum+=n;
}
printf("%.3f\n",sum); //输出...
}
}
…