求助,这题到底哪个特殊数据错了?
  • 板块题目总版
  • 楼主dkdk
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/10/30 23:18
  • 上次更新2023/10/27 04:46:24
查看原帖
求助,这题到底哪个特殊数据错了?
823144
dkdk楼主2022/10/30 23:18

这题是UVA 1586

题目描述: 现给你若干个分子式需要你求分子量。

例如:C6H5OH的分子量为12.016+1.0085+16.00+1.008=94.108g/mol。

(ps:数字为数字前面元素的下标,所有分子式均无括号例如:2OH=2*16.00+1.008)

输入输出格式

输入:

输入n(2<=n<=99)

接下来n行为分子式

输出:

输出每个分子的分子式

源代码:

#include <string.h>
#include <stdlib.h>
#include <stdio.h>

int main()
{
    int t;
    scanf("%d",&t);
    char ch = getchar();
    while(t--)
    {
        char s[10000];
        int a;
        int i = 0;int j = 0;double x = 0.0;double sum = 0.0;int cnt = 0; int q = 0;
        while((a = getchar())!='\n')
        {
            s[i] = a;
            i++;
        }
        for(int y = 0;s[y]>='0' && s[y]<='9';j = y)//判断化学式前面有没有数字
        {
            q = q*10 + (s[y] - '0');
            y++;
        }
        while(j<i)
        {
            cnt = 0;
            if(j+1<i)//判断是不是最后一位字符
            {
                switch(s[j])
                {
                case 'C':
                    x = 12.01;
                    break;
                case 'H':
                    x = 1.008;
                    break;
                case 'O':
                    x = 16.00;
                    break;
                case 'N':
                    x = 14.01;
                    break;

                }
                if(s[j+1]>='0' && s[j+1]<='9')//判断下一位是不是数字
                {
                    int k = 0;
                    for( k = j+1;k<i;k++)//再往下判断下一位是不是数字
                    {
                        if(s[k]>='0' && s[k]<='9')
                        {
                            cnt = cnt*10 + (s[k]-'0');
                        }
                        else
                        {
                            break;
                        }
                    }
                    j = k;
                    sum = sum + x*cnt;
                    continue;
                }
                else//不是数字直接加起来
                {
                    sum = sum + x;
                    j = j+1;
                    continue;
                }
            }
            switch(s[j])//最后一位字符的处理
                {
                case 'C':
                    x = 12.01;
                    break;
                case 'H':
                    x = 1.008;
                    break;
                case 'O':
                    x = 16.00;
                    break;
                case 'N':
                    x = 14.01;
                    break;
                }
            sum = sum + x;
            break;
        }
        if(q==0)
        {
            printf("%.3f\n",sum);
        }
        else
        {
             printf("%.3f\n",sum*q);
        }
    }
    return 0;
}
2022/10/30 23:18
加载中...