有几个点过不了,请大神帮忙看一下。。。。

P1022 [NOIP2000 普及组] 计算器的改良

@[AngelBeats](/space/show?uid=89133) 1.判断正负号的时候 ```cpp if( a[i]<='0'||a[i]>='9') //应该改成下面这样 if(a[i]<'0'||a[i]>'9') ``` 但是这样也有问题像这样的数据你过不了 ```cpp -a+a-3=a-3 ``` 你会卡在等号后面的a上,导致你的x等于了a,然后gg 所以你应该改成这样 ``` if(a[i]=='-'||a[i]=='+') ``` 2.判断变量前面是否有系数的时候 ```cpp if(m == 0) m = 1; //你的代码 ``` 有一个问题你没有考虑到,如果m本来就等于0呢?举个例子 ```cpp a=0 ``` m本来等于0的,但你的代码会让m=1,所以正确答案为a=0这样的代码会跑出a=1的结果。 所以应该加个特判 ```cpp if(m==0&&(a[i]>='a'&&a[i]<='z')) m=1; ``` 只有当数字后面有变量(也就是字母)时才将0变成1 然后就没什么问题了 主要是冲着你这名字来的,少打了个'!'号 dalao,麻烦下次发代码的时候用一下Markdown,这样看好麻烦
by ACINE @ 2018-08-05 21:53:55


非常抱歉,感谢您的提醒和建议,谢谢!
by AngelBeats @ 2018-08-06 09:05:58


#include <bits\stdc++.h> using namespace std; int main() { char s[100000]; scanf("%s", s); double a = 0, b = 0; int slog = 1, num = 0, flag; for (int i = 0; s[i] != '\0'; i++) { if ('0' <= s[i] && s[i] <= '9') { num = num * 10 + s[i]; } else if ('a' <= s[i] && s[i] <= 'z') { a += num; num = 0; flag = i; } else if (s[i] == '-') { slog = -1; } else if (s[i] == '-') { slog = 1; } num *= slog; } printf("%c=%0.3f", s[flag], a/b); return 0; }
by 时空之影 @ 2018-08-06 15:41:28


#你这个好像编译失败 ``` include <bits\stdc++.h> using namespace std; int main() { char s[100000]; scanf("%s", s); double a = 0, b = 0; int slog = 1, num = 0, flag; for (int i = 0; s[i] != '\0'; i++) { if ('0' <= s[i] && s[i] <= '9') { num = num 10 + s[i]; } else if ('a' <= s[i] && s[i] <= 'z') { a += num; num = 0; flag = i; } else if (s[i] == '-') { slog = -1; } else if (s[i] == '-') { slog = 1; } num = slog; } printf("%c=%0.3f", s[flag], a/b); return 0; } ```
by AngelBeats @ 2018-08-06 16:56:33


# 我把我的代码重发一次,太辣眼了 ``` #include <cstdio> char a[20]; int main(){ char c,x; int m,i,j; double sum1 = 0,sum2 = 0,tag = 1;//sum1为合并整数,sum2为合并变量; scanf("%s",a); for(i = 0;a[i] != '\0';){ x = '+'; if(a[i] == '=') { tag = -1; i++; } if(a[i] == '-'||a[i] == '+') { x = a[i]; i++; } m = 0; while(a[i] >= '0'&&a[i] <= '9'){ m = m * 10 + (a[i] - '0'); i++; } if(m == 0&&a[i] >= 'a'&&a[i] <= 'z') m = 1; m *= tag; if(x == '-' ) m *= -1; if(a[i] >= 'a'&&a[i] <= 'z') { sum1 += m; c = a[i]; i++; } else sum2 += m; } printf("%c=%.3lf",c,-sum2/sum1); return 0; } ```
by AngelBeats @ 2018-08-06 16:58:42


|