80分,改后70,WA求解

P1307 [NOIP2011 普及组] 数字反转

最萌軒宇 @ 2022-10-20 20:38:44

80 分代码:

#include <cstdio>
#include <cmath>
using namespace std;
int n;
int main() {
    scanf("%d", &n);
    int k = 0, nn = abs(n);
    int m = nn;
    while(nn) {
        if(nn / 10 != 0) {
            nn /= 10;
            k++;
        } else {
            k++;
            break;
        }
    }
    if(n == 0) {
        printf("%d", n);
    } else if(n < 0) {
        printf("-");
    }
    if(m % 10 == 0) {
        m /= 10;
        for(int i = 1; i < k; i++) {
            printf("%d", m % 10);
            m /= 10;
        }
    } else {
        for(int i = 1; i <= k; i++) {
            printf("%d", m % 10);
            m /= 10;
        }
    }
    return 0;
}

主要思路是用 while 求整数绝对值长度,然后判断是否为 0 ,或负数,否则正数,负数输出" - ",接着倒序输出,这里忽视了 9000000 的情况,导致输出 0 没有全部判断

下面是 70 分代码:

#include <cstdio>
#include <cmath>
using namespace std;
int n;
int main() {
    scanf("%d", &n);
    int k = 0, nn = abs(n);
    int m = nn;
    while(nn) {
        if(nn / 10 != 0) {
            nn /= 10;
            k++;
        } else {
            k++;
            break;
        }
    }
    if(n == 0) {
        printf("%d", n);
    } else if(n < 0) {
        printf("-");
    }
    for(int i = 1; i <= k; i++) {
        if(m % 10 == 0) {
            m /= 10;
        } else {
            printf("%d", m % 10);
            m /= 10;
        }
    }
    return 0;
}

改后在 for 循环内加入

if(m % 10 == 0) {
    m /= 10;
}

判断当前数值是否为 0 ,否则输出当前数值

求dalao讲解, 蟹蟹


by cute_overmind @ 2022-10-20 20:49:21

楼主,不用那么复杂

#include <iostream>
using namespace std;
int main()
{
    int numa , numb;
    cin >> numa;  
    while(numa != 0)
    {
        numb = numb * 10 + numa % 10;
        numa /= 10; 
    }
    cout << numb;
    return 0; 
} 

加个好友呗


by cute_overmind @ 2022-10-20 20:49:55

@最萌軒宇


by VitrelosTia @ 2022-10-20 20:50:34

@最萌軒宇 我觉得根本没有这么复杂,其实可以每次提取出最后一位放在答案的首位,这样假如有0就不会有影响,也不需要判负

#include<bits/stdc++.h>
using namespace std;
int n,ans=0;
int main(){
    cin>>n;
    while(n>0){
        ans=ans*10+n%10;//ans乘十空出末位并将末位放入
        n/=10;移到前一位
    }
    cout<<ans;
}

by 最萌軒宇 @ 2022-10-20 20:59:16

@Pikacu 好哒,互关啦


by 最萌軒宇 @ 2022-10-20 21:00:56

@VT_SODC3DC3BSLF qs,但改了几次莫名烦躁了点


|