社区讨论

为什么我每次都是0???

P1022[NOIP 2000 普及组] 计算器的改良参与者 3已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@mi6tsgfi
此快照首次捕获于
2025/11/20 10:42
4 个月前
此快照最后确认于
2025/11/20 10:42
4 个月前
查看原帖
样例过了,第一个点下载了,在c++和IDE中输出都和下载一样, 但还是0分。谁能帮我看一下,谢了。
CPP
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
char a[55],b[55],k;
float z,c;
int p,x;
int main()
{
    int i=1;
    while (1)
    {
        scanf("%c",&a[i]);
        if (a[i]=='=')
        break;
        i++;
    }
    gets(b+1);
    int al=strlen(a+1);
    int bl=strlen(b+1);
    for (int i=al-1;i>=1;)
    {
        int p=2;
        if (a[i]>='a'&&a[i]<='z')
        {
            p=1;
            k=a[i];
            i--;
        }
        int f=0;
        while (a[i]!='+'&&a[i]!='-'&&i>=1)
        {
            x=(a[i]-'0')*pow(10,f)+x;
            i--;
            f++;
        }
        if (p==1)
        {
            if (a[i]=='-')
            z=z+x;
            else
            z=z-x;
            i--;
            x=0;
        }
        if (p==2)
        {
            if (a[i]=='-')
            c=c-x;
            else
            c=c+x;
            i--;
            x=0;
        }
    }
    for (int i=bl;i>=1;)
    {
        int p=2;
        if (b[i]>='a'&&b[i]<='z')
        {
            k=b[i];
            i--;
            p=1;
        }
        int f=0;
        while (b[i]!='+'&&b[i]!='-'&&i>=1)
        {
            x=(b[i]-'0')*pow(10,f)+x;
            i--;
            f++;
        }
        if (p==1)
        {
            if (b[i]=='-')
            z=z-x;
            else
            z=z+x;
            i--;
            x=0;
        }
        if (p==2)
        {
            if (b[i]=='-')
            c=c+x;
            else
            c=c-x;
            i--;
            x=0;
        }
    }
    float ans=c/z;
    if (ans==-0)
    printf("%c=%.3f",k,0);
    else
    printf("%c=%.3f",k,ans);
    return 0;
}

回复

6 条回复,欢迎继续交流。

正在加载回复...