UVa 1586 Molar mass
题
要解决的问题
如何将字母与它代表的数字对应?
只有4个字母,枚举,用if else。
python的话可以用字典。c++应该没有字典。
字符转换为数组
单个数字字符转换为数字,直接-‘0’,ascii中数字是连续的。
判断是数字还是字母
只有4个字母,直接if。
mycode
#include <stdio.h>
#include <string.h>
#include <ctype.h>
//判断是不是字母
int isAlp(char ch)
{
if (ch == 'C') return 1;
if (ch == 'H') return 1;
if (ch == 'O') return 1;
if (ch == 'N') return 1;
return 0;
}
//单个数字字符转换为数字
int ch2num(char ch)
{
return ch - '0';
}
int main()
{
int T;
scanf("%d", &T);
for (int i = 0; i < T; i++)
{
char s[81];
scanf("%s", s);
int len = strlen(s);
float mass = 0;
for (int j = 0; j < len; j++)
{
if (s[j] == 'C')//逐个判断
{
if (j + 2 < len && !isAlp(s[j + 1]) && !isAlp(s[j + 2]))//两位数
{
mass += 12.01 * (ch2num(s[j + 1]) * 10 + ch2num(s[j + 2]));
}
else if (j + 1 < len && !isAlp(s[j + 1]))//一位数
mass += 12.01 * ch2num(s[j + 1]);
else
mass += 12.01;
}
if (s[j] == 'H')
{
if (j + 2 < len && !isAlp(s[j + 1]) && !isAlp(s[j + 2]))
mass += 1.008 * (ch2num(s[j + 1]) * 10 + ch2num(s[j + 2]));
else if (j + 1 < len && !isAlp(s[j + 1]))
mass += 1.008 * ch2num(s[j + 1]);
else
mass += 1.008;
}
if (s[j] == 'O')
{
if (j + 2 < len && !isAlp(s[j + 1]) && !isAlp(s[j + 2]))
mass += 16.00 * (ch2num(s[j + 1]) * 10 + ch2num(s[j + 2]));
else if (j + 1 < len && !isAlp(s[j + 1]))
mass += 16.00 * ch2num(s[j + 1]);
else
mass += 16.00;
}
if (s[j] == 'N')
{
if (j + 2 < len && !isAlp(s[j + 1]) && !isAlp(s[j + 2]))
mass += 14.01 * (ch2num(s[j + 1]) * 10 + ch2num(s[j + 2]));
else if (j + 1 < len && !isAlp(s[j + 1]))
mass += 14.01 * ch2num(s[j + 1]);
else
mass += 14.01;
}
}
printf("%.3f\n", mass);
}
return 0;
}
本文来自博客园,作者:ssh_alitheia,转载请注明原文链接:https://www.cnblogs.com/shanchuan/p/8150296.html