数字反转
题目链接:ybt高效进阶2-1-1 / luogu P1307
题目大意
给定一个整数,请将该数各个位上数字反转得到一个新数。
新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零。
思路1
联想一下快读,就按快读的方式,先处理负号(如果有),然后就按快读反着来。
快读是从左往右(从高位到低位),那你就从右往左(从低位到高位)。
这个比较快,但是如果这个数位数很大就不行了。
代码1
#include<cstdio>
using namespace std;
int n, nn;
int main() {
scanf("%d", &n);
if (n < 0) {
n = -n;
printf("-");
}
while (n) {
nn = nn * 10 + (n % 10);
n /= 10;
}
printf("%d", nn);
return 0;
}
思路2
如果位数很大,我们考虑用字符串来做。
就类似的做法,先判断负号,处理掉。
然后翻转,就从右往左依次输出即可。
但是要处理最高位的
0
0
0,那就如果最开始有一段
0
0
0 串,就不输出它。
(但是如果整个都是
0
0
0 的话还是要留下一个
0
0
0 的)
代码2
#include<cstdio>
#include<cstring>
using namespace std;
int last = 0, size;
char c[11];
int main() {
scanf("%s", c);
if (c[0] == '-') {
printf("-");
last = 1;
}
size = strlen(c);
while (c[size - 1] == '0' && size - 1 > last) size--;
for (int j = size - 1; j >= last; j--)
putchar(c[j]);
return 0;
}