题目描述
给定一个整数 N,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 2)。
输入格式
一个整数 N。
输出格式
一个整数,表示反转后的新数。
输入输出样例
输入 #1
123
输出 #1
321
输入 #2
-380
输出 #2
-83
说明/提示
【数据范围】
−1000000000≤N≤1000000000
NOIP2011 普及组第一题
一波三折的写题过程:
第一次:
WA思路:
想着这题太简单了,是0不输出不就好了吗?成功拿下70分
WA代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
if(n<0)
{
cout<<'-';
}
n=abs(n);
while(n)
{
if(n%10)
{
cout<<n%10;
}
n/=10;
}
return 0;
}
想法:
自己真辣鸡啊,难道103中间的0没有意义吗?白白一个WA
提交记录:
太丢人了,不放了,有兴趣的可以去找找
第二次:
WA思路:
定义一个bool类型的变量f,初始值为false,然后while(n),如果碰到n%10!=0(不是0绝对要输出)或者f==true(前面有非0数字了,这个0有意义),就输出,并将f设为true
WA代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
bool f=false;
if(n<0)
{
cout<<'-';
}
n=abs(n);
while(n)
{
if(n%10||f)
{
cout<<n%10;
f=true;
}
n/=10;
}
return 0;
}
想法:
???怎么还是WA?而且WA100分?最后一个测试点是啥?(当时已经蓝名了,差点下载数据,后来忍住了,回去看题目)
记录:
同上,太丢人了,不放了
第三次:
AC思路:
回去看了一眼题目,看见了“即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零”输入0试试!好好好,没有输出是吧!f一直是false!最后加一个if(!f)cout<<"0",能过了吧?
AC代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
bool f=false;
if(n<0)
{
cout<<'-';
}
n=abs(n);
while(n)
{
if(n%10||f)
{
cout<<n%10;
f=true;
}
n/=10;
}
if(!f)
{
cout<<0;
}
return 0;
}
想法:
终于对了,哦耶!
记录:
这篇博客就到这里啦,我出去玩了,拜拜!