TaamZeonhei @ 2021-06-07 08:36:36
为什么测试点1,5,8不过?在编译器测试的答案和题目的答案一模一样啊!?!救救孩子!!!
#include<iostream>
#include<string>
using namespace std;
int main()
{
int ii=10;
int j=0;//判断值为“假”
string num;
cin>>num;
if(num[0]==48) cout<<0<<endl;//"0"
else
{
if(num[0]=='-')//负数
{
cout<<'-';
for(int i=1;i<=10;i++)
{
if((num[ii]!=48&&j==0)&&num[ii]!=0)
{
cout<<num[ii];
j=1;//遇到倒数第一位非负数字后判断值为“真”
}
else if(j==1) cout<<num[ii];
ii=ii-1;
}
}
else//正数
{
for(int i=0;i<=10;i++)
{
if((num[ii]!=48&&j==0)&&num[ii]!=0)
{
cout<<num[ii];
j=1;//遇到倒数第一位非负数字后判断值为“真”
}
else if(j==1) cout<<num[ii];
ii=ii-1;
}
}
}
return 0;
}
by metaphysis @ 2021-06-07 09:24:43
@TaamZeonhei
您使用:
int ii=10;
如果给定的输入长度不足10位,那么在引用 num[ii]
时,其值是不确定的,因为已经超出读入数据的范围,这样会导致出现未定义行为(undefined behavior),使得结果出现错误。
by metaphysis @ 2021-06-07 09:28:27
@TaamZeonhei
#include<iostream>
#include<string>
using namespace std;
int main()
{
int ii=10;
int j=0;//判断值为“假”
string num;
cin>>num;
if(num[0]==48) cout<<0<<endl;//"0"
else
{
int end = 0;
if(num[0]=='-') { cout<<'-'; end = 1; }
for (int i = num.length() - 1; i >= end; i--)
{
if (num[i] == '0') continue;
for (int j = i; j >= end; j--)
cout << num[j];
break;
}
}
return 0;
}
by TaamZeonhei @ 2021-06-07 12:19:07
@metaphysis 谢谢大佬。可是输入-290输出-92这组数据我用原来的代码在电脑上运行是没错的,到了题目判断就WA了,这是为什么?
by metaphysis @ 2021-06-07 15:00:58
我在洛谷IDE上测试输入-290时会输出乱码。
by _Cppsteve_ @ 2021-07-15 16:51:24
我的思路如下:把它的各位用模运算提取出来,然后加入另一个变量中,但是那个变量要提前乘以10
附上源码
#include <iostream>
using namespace std;
int main()
{
int a;
cin>>a;
int b=0;
while(a!=0){
b=b*10+a%10;
a/=10;
}
cout<<b<<endl;
return 0;
}