建议增加测试用例:9999999999999999998%

P1553 数字反转(升级版)

@[you2306](/user/1024479) 有什么特殊用意吗? 如果有,wssb;如果没有,jbl。
by zym0325 @ 2023-07-05 16:36:58


@[you2306](/user/1024479) 这么长一串有必要吗 如果没有,那btd jbl
by Rieman_sum @ 2023-07-05 16:40:45


这个数据根本卡不了任何已 AC 的代码
by zhuweiqi @ 2023-07-05 16:42:02


@[you2306](/user/1024479) 你把这个数据hack的错误代码发出来。
by cff_0102 @ 2023-07-05 16:49:39


@[you2306](/user/1024479) 有哪些代码会被 hack?
by 小粉兔 @ 2023-07-05 22:18:55


@[小粉兔](/user/10703) 因为9999999999999999998超过了long long的范围,使用long long来实现数字反转会出错。当前的测试用例使用long long来实现数字反转会通过。 ``` long long reverse_integer(long long n) { long long result = 0; while(n>0) { result = result*10 + n%10; n/=10; } return result; } ```
by you2306 @ 2023-07-09 18:52:36


有问题的完整代码如下: ```cpp // P1553 数字反转(升级版) #include <iostream> #include <string> #include <sstream> #include <algorithm> using namespace std; long long reverse_integer(long long n) { long long result = 0; while(n>0) { result = result*10 + n%10; n/=10; } return result; } int main() { string s; getline(cin, s); stringstream ss = stringstream(s); if(s.find('.')!=s.npos) { long long i1, i2; ss >> i1; ss.ignore(1); ss >> i2; cout << reverse_integer(i1) << "." << reverse_integer(i2); } else if(s.find('/')!=s.npos) { long long i1, i2; ss >> i1; ss.ignore(100,'/'); ss >> i2; cout << reverse_integer(i1) << "/" << reverse_integer(i2); } else if(s.find('%')!=s.npos) { long long i; ss >> i; cout << reverse_integer(i) << "%"; } else { reverse(s.begin(), s.end()); int p = s.find_first_not_of('0'); if(p!=s.npos) cout << s.substr(p); else cout << "0"; } cout << endl; } ```
by you2306 @ 2023-07-09 18:54:23


|