首页 > 代码库 > BestCoder12 1002.Help him(hdu 5059) 解题报告
BestCoder12 1002.Help him(hdu 5059) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5059
题目意思:就是输入一行不多于 100 的字符串(除了‘\n‘ 和 ‘\r‘ 的任意字符),问是否是合法的整数,如果是的话问是否在[a, b] 范围内,是则输出 YES,否则输出 NO
合法的整数:(1)非负整数:只有数字,没有前导0
(2)负数:负号后面只能跟着数字,负号前没有任何字符
首先这条题感觉不是出得太好,不过都是硬着头皮学人家做啦。反正一些很变态的数据可能还是过不了,但却AC的。
模拟题一般都是比较恶心的!!!
AC 代码:
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <string>using namespace std;typedef __int64 LL;inline LL judge(string s, int sign, int st){ LL num = 0; for (int i = st; i < s.size(); i++) num = num * 10 + (s[i]-‘0‘); num *= sign; return num;}int main(){ int len, a, b; string s; while (getline(cin, s)) { scanf("%d%d", &a, &b); getchar(); len = s.size(); int flag = 0; if (s[0] == ‘-‘) { for (int i = 1; i < len; i++) { flag = 0; if (s[i] < ‘0‘ || s[i] > ‘9‘) break; flag = 1; } } else { for (int i = 0; i < len; i++) { flag = 0; if (s[i] < ‘0‘ || s[i] > ‘9‘) break; flag = 1; } } // 特判0的几种情况 if (s[0] == ‘0‘ && len != 1) flag = 0; if (s[0] == ‘0‘ && len == 1) flag = 1; if (s[0] == ‘-‘ && s[1] == ‘0‘) flag = 0; if (!flag) { printf("NO\n"); continue; } // 处理到这里就已经是合法整数了 LL ans = 0; if (s[0] == ‘-‘) ans = judge(s, -1, 1); else ans = judge(s, 1, 0); if (len == 0 || len >= 12 || ans < a || ans > b) printf("NO\n"); else printf("YES\n"); } return 0;}
一直搞不明白更改成这样为什么是错的!!!空闲再想~~~
WA~~~WA ~~~~wa ~~~wa
1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <string> 6 using namespace std; 7 8 typedef __int64 LL; 9 10 inline int check(string s, int st)11 {12 int f;13 for (int i = st; i < s.size(); i++)14 {15 f = 0;16 if (s[i] < ‘0‘ || s[i] > ‘9‘)17 break;18 f = 1;19 }20 return f;21 }22 23 inline LL judge(string s, int sign, int st)24 {25 LL num = 0;26 for (int i = st; i < s.size(); i++)27 num = num * 10 + (s[i]-‘0‘);28 num *= sign;29 return num;30 }31 32 int main()33 {34 int a, b;35 string s;36 while (getline(cin, s))37 {38 scanf("%d%d", &a, &b);39 getchar();40 int flag = 0;41 if (s[0] == ‘-‘)42 flag = check(s, 1);43 else44 flag = check(s, 0);45 if (s[0] == ‘0‘ && s.size() != 1)46 flag = 0;47 if (s[0] == ‘0‘ && s.size() == 1)48 flag = 1;49 if (s[0] == ‘-‘ && s[1] == ‘0‘)50 flag = 0;51 if (!flag)52 {53 printf("NO\n");54 continue;55 }56 LL ans = 0;57 if (s[0] == ‘-‘)58 ans = judge(s, -1, 1);59 else60 ans = judge(s, 1, 0);61 if (s.size() == 0 || s.size() >= 12 || ans < a || ans > b)62 printf("NO\n");63 else64 printf("YES\n");65 }66 return 0;67 }
BestCoder12 1002.Help him(hdu 5059) 解题报告
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。