社区讨论

16pts求调

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

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mhjtxkc5
此快照首次捕获于
2025/11/04 08:27
4 个月前
此快照最后确认于
2025/11/04 08:27
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int cst, xs;
string s;
char value;
bool f;
bool isfh(char x)
{
    if (x == '+' || x == '-' || x == '=')
        return true;
    else
        return false;
}
void add(string x)
{
    int ans = 0, cnt = 1;
    if (!f)
    {
        if (!isdigit(x[x.size() - 1]))
        {
            value = x[x.size() - 1];
            if (x[0] == '-')
            {
                for (int i = 1; i < x.size() - 1; i++)
                {
                    ans += (x[i] - '0') * cnt;
                    cnt *= 10;
                }
                xs -= ans;
            }
            else
            {
                for (int i = 1; i < x.size() - 1; i++)
                {
                    ans += (x[i] - '0') * cnt;
                    cnt *= 10;
                }
                xs += ans;
            }
        }
        else
        {
            if (x[0] == '-')
            {
                for (int i = 1; i < x.size(); i++)
                {
                    ans += (x[i] - '0') * cnt;
                    cnt *= 10;
                }
                cst += ans;
            }
            else
            {
                for (int i = 1; i < x.size(); i++)
                {
                    ans += (x[i] - '0') * cnt;
                    cnt *= 10;
                }
                cst -= ans;
            }
        }
    }
    else{
        if (!isdigit(x[x.size() - 1]))
        {
            value = x[x.size() - 1];
            if (x[0] == '-')
            {
                for (int i = 1; i < x.size() - 1; i++)
                {
                    ans += (x[i] - '0') * cnt;
                    cnt *= 10;
                }
                xs += ans;
            }
            else
            {
                for (int i = 1; i < x.size() - 1; i++)
                {
                    ans += (x[i] - '0') * cnt;
                    cnt *= 10;
                }
                xs -= ans;
            }
        }
        else
        {
            if (x[0] == '-')
            {
                for (int i = 1; i < x.size(); i++)
                {
                    ans += (x[i] - '0') * cnt;
                    cnt *= 10;
                }
                cst -= ans;
            }
            else
            {
                for (int i = 1; i < x.size(); i++)
                {
                    ans += (x[i] - '0') * cnt;
                    cnt *= 10;
                }
                cst += ans;
            }
        }
    }
}
int main()
{
    cin >> s;
    for (int i = 0; i <= s.size(); i++)
    {
        if (i == s.size() || isfh(s[i]))
        {
            int j = i - 1, cnt = 0;
            while (j >= 0 && !isfh(s[j]))
            {
                j--, cnt++;
            }
            string tmp = s.substr(j + 1, cnt);
            if (j < 0 || s[j] == '+' || s[j] == '=')
                tmp = '+' + tmp;
            else
                tmp = '-' + tmp;
            //cout << tmp << "\n";
            add(tmp);
        }
        if(i==s.size()) continue;
        if (s[i] == '=')
            f = true;
    }
    cout<<value<<"=";
    printf("%.3lf",(double)cst/(double)xs);
    return 0;
}

回复

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

正在加载回复...