数字反转问题
[NOIP2011]数字反转
https://ac.nowcoder.com/acm/problem/16584
链接:https://ac.nowcoder.com/acm/problem/16584 来源:牛客网
题目描述 给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。
输入描述: 一个整数 N。
输出描述: 一个整数,表示反转后的新数。
本题的难点在于反转后,前面数字0的消除。
方法一:先消除前导0
#include <bits/stdc++.h>
using namespace std;
int N;
void reversal(int N) {
if(N == 0)printf("%d",N);
while (N != 0) {
int temp = N % 10;
printf("%d", temp);
N = N / 10;
}
}
int main(void) {
scanf("%d", &N);
if (N >= 0 ) {
while (N >= 10 && N % 10 == 0) {
N = N / 10;
}
reversal(N);
}else{
N = -N;
while (N >= 10 && N % 10 == 0) {
N = N / 10;
}
printf("-");
reversal(N);
}
return 0;
}
这样就可以不用根据0的个数来判断进行取余除十的次数了。
方法二:将N当作数字看待,从而避免考虑正负。(最巧妙的方法)
#include <bits/stdc++.h>
using namespace std;
int N;
int sum = 0;
int main(void) {
scanf("%d", &N);
while (N != 0) {
sum = sum * 10 + N % 10;
N = N / 10;
}
printf("%d", sum);
return 0;
}
方法三:将数字当作字符数组来看待,在遇到整数之前遇到0则不输出。(数字同理,不做演示)
#include <bits/stdc++.h>
using namespace std;
char N[100];
bool flag = false;
int main(void) {
scanf("%s", N);
if(N[0] != '-'){
int length = strlen(N);
for (int i = length - 1; i >= 0; i--) {
if(N[i] != '0'){
flag = true;//当打印到第一个非零整数时,使其一直打印下去。
}
if(flag){
printf("%c",N[i]);
}
}
}else{
printf("-");
int length = strlen(N);
for (int i = length - 1; i >= 1; i--) {
if(N[i] != '0'){
flag = true;//当打印到第一个非零整数时,使其一直打印下去。
}
if(flag){
printf("%c",N[i]);
}
}
}
return 0;
}
最后给哥们儿们表演一个胸口碎大石!!!!!!
using namespace std;
string N;
int main(void) {
cin >> N;
if (N[0] == '-') { //当N为负数时
string temp = "000000000";
for (int i = 0; i < N.length() - 1; i++) {
temp[i] = N[i + 1];
}
N = temp;
if (N[N.length() - 1] != '0') {
cout<<'-';
for (int i = 1; i <= N.length(); i++) {
cout << N[N.length() - i];
}
}
if (N[N.length() - 1] == '0' && N[N.length() - 2] != '0') {
cout<<'-';
for (int i = 2; i <= N.length(); i++) {
cout << N[N.length() - i];
}
}
if (N[N.length() - 1] == '0' && N[N.length() - 2] == '0' && N[N.length() - 3] != '0') {
cout<<'-';
for (int i = 3; i <= N.length(); i++) {
cout << N[N.length() - i];
}
}
if (N[N.length() - 1] == '0' && N[N.length() - 2] == '0' && N[N.length() - 3] == '0' && N[N.length() - 4] != '0') {
cout<<'-';
for (int i = 4; i <= N.length(); i++) {
cout << N[N.length() - i];
}
}
if (N[N.length() - 1] == '0' && N[N.length() - 2] == '0' && N[N.length() - 3] == '0' && N[N.length() - 4] == '0' && N[N.length() - 5] != '0') {
cout<<'-';
for (int i = 5; i <= N.length(); i++) {
cout << N[N.length() - i];
}
}
if (N[N.length() - 1] == '0' && N[N.length() - 2] == '0' && N[N.length() - 3] == '0' && N[N.length() - 4] == '0' && N[N.length() - 5] == '0' && N[N.length() - 6] != '0') {
cout<<'-';
for (int i = 6; i <= N.length(); i++) {
cout << N[N.length() - i];
}
}
if (N[N.length() - 1] == '0' && N[N.length() - 2] == '0' && N[N.length() - 3] == '0' && N[N.length() - 4] == '0' && N[N.length() - 5] == '0' && N[N.length() - 6] == '0' && N[N.length() - 7] != '0') {
cout<<'-';
for (int i = 7; i <= N.length(); i++) {
cout << N[N.length() - i];
}
}
if (N[N.length() - 1] == '0' && N[N.length() - 2] == '0' && N[N.length() - 3] == '0' && N[N.length() - 4] == '0' && N[N.length() - 5] == '0' && N[N.length() - 6] == '0' && N[N.length() - 7] == '0' && N[N.length() - 8] != '0') {
cout<<'-';
for (int i = 8; i <= N.length(); i++) {
cout << N[N.length() - i];
}
}
if (N[N.length() - 1] == '0' && N[N.length() - 2] == '0' && N[N.length() - 3] == '0' && N[N.length() - 4] == '0' && N[N.length() - 5] == '0' && N[N.length() - 6] == '0' && N[N.length() - 7] == '0' && N[N.length() - 8] == '0' && N[N.length() - 9] != '0') {
cout<<'-';
for (int i = 9; i <= N.length(); i++) {
cout << N[N.length() - i];
}
}
if (N[N.length() - 1] == '0' && N[N.length() - 2] == '0' && N[N.length() - 3] == '0' && N[N.length() - 4] == '0' && N[N.length() - 5] == '0' && N[N.length() - 6] == '0' && N[N.length() - 7] == '0' && N[N.length() - 8] == '0' && N[N.length() - 9] == '0' && N[N.length() - 10] != '0') {
cout<<'-';
for (int i = 10; i <= N.length(); i++) {
cout << N[N.length() - i];
}
}
return 0;
}
if (N[0] != '-') { //当N不为负数时
if (N[N.length() - 1] != '0') {
for (int i = 1; i <= N.length(); i++) {
cout << N[N.length() - i];
}
}
if (N[N.length() - 1] == '0' && N[N.length() - 2] != '0') {
for (int i = 2; i <= N.length(); i++) {
cout << N[N.length() - i];
}
}
if (N[N.length() - 1] == '0' && N[N.length() - 2] == '0' && N[N.length() - 3] != '0') {
for (int i = 3; i <= N.length(); i++) {
cout << N[N.length() - i];
}
}
if (N[N.length() - 1] == '0' && N[N.length() - 2] == '0' && N[N.length() - 3] == '0' && N[N.length() - 4] != '0') {
for (int i = 4; i <= N.length(); i++) {
cout << N[N.length() - i];
}
}
if (N[N.length() - 1] == '0' && N[N.length() - 2] == '0' && N[N.length() - 3] == '0' && N[N.length() - 4] == '0' && N[N.length() - 5] != '0') {
for (int i = 5; i <= N.length(); i++) {
cout << N[N.length() - i];
}
}
if (N[N.length() - 1] == '0' && N[N.length() - 2] == '0' && N[N.length() - 3] == '0' && N[N.length() - 4] == '0' && N[N.length() - 5] == '0' && N[N.length() - 6] != '0') {
for (int i = 6; i <= N.length(); i++) {
cout << N[N.length() - i];
}
}
if (N[N.length() - 1] == '0' && N[N.length() - 2] == '0' && N[N.length() - 3] == '0' && N[N.length() - 4] == '0' && N[N.length() - 5] == '0' && N[N.length() - 6] == '0' && N[N.length() - 7] != '0') {
for (int i = 7; i <= N.length(); i++) {
cout << N[N.length() - i];
}
}
if (N[N.length() - 1] == '0' && N[N.length() - 2] == '0' && N[N.length() - 3] == '0' && N[N.length() - 4] == '0' && N[N.length() - 5] == '0' && N[N.length() - 6] == '0' && N[N.length() - 7] == '0' && N[N.length() - 8] != '0') {
for (int i = 8; i <= N.length(); i++) {
cout << N[N.length() - i];
}
}
if (N[N.length() - 1] == '0' && N[N.length() - 2] == '0' && N[N.length() - 3] == '0' && N[N.length() - 4] == '0' && N[N.length() - 5] == '0' && N[N.length() - 6] == '0' && N[N.length() - 7] == '0' && N[N.length() - 8] == '0' && N[N.length() - 9] != '0') {
for (int i = 9; i <= N.length(); i++) {
cout << N[N.length() - i];
}
}
if (N[N.length() - 1] == '0' && N[N.length() - 2] == '0' && N[N.length() - 3] == '0' && N[N.length() - 4] == '0' && N[N.length() - 5] == '0' && N[N.length() - 6] == '0' && N[N.length() - 7] == '0' && N[N.length() - 8] == '0' && N[N.length() - 9] == '0' && N[N.length() - 10] != '0') {
for (int i = 10; i <= N.length(); i++) {
cout << N[N.length() - i];
}
}
}
return 0;
}
把每个反转之前每个后面有多少0的情况全部列举了一遍!!!!!
真实dn.......