求救 对了一半

P1307 [NOIP2011 普及组] 数字反转

OrayRofn @ 2024-01-22 20:11:30

#include<stdio.h>
#include<math.h>
void fun(int a){
    if(a%10==0){
        a/=10;
    }
    printf("%d",a%10);
    if(a/10>0){
        fun(a/10);
    }}
main(){
    int a;
    scanf("%d",&a);
    if(a<0){
    a=abs(a);
    printf("-");}
    fun(a);
}

by Y_QWQ_Y @ 2024-01-22 20:15:36

@OrayRofn 你这……

看看我的

#include<bits/stdc++.h>
using namespace std;
int a;
int main()
{
    scanf ("%d" , &a);
    if (a == 0)
    {
        printf ("0");
        return 0;
    }
    int b;
    while (a)
    {
        b = b * 10 + a % 10;
        a /= 10;
    }
    printf ("%d" , b);
    return 0;
}

by Y_QWQ_Y @ 2024-01-22 20:17:15

@OrayRofn 你这个 fun 把中间的 0 都过滤掉了。

你测测 -101,看看你的是不是输出 -11


by OrayRofn @ 2024-01-22 20:21:58

过了过了过了! 递归里面把中间含0的也给去掉了(悲)优化好了

by Zemu_Ooo @ 2024-01-22 20:24:01

@OrayRofn 给你一组 hack,应该大致就知道问题在哪了(

输入

800000000

输出

8

错误输出

00008

明显你的方法尾 0 没除干净(

#include <stdio.h>
#include <stdlib.h> 

void fun(int a) {
    if (a == 0) return;

    printf("%d", a % 10);
    fun(a / 10);
}

int main() {
    int a;
    scanf("%d", &a);

    if (a == 0) printf("0");

    if (a < 0) {
        printf("-");
        a = -a; 
    }

    while (a != 0 && a % 10 == 0) {
        a /= 10;
    }

    fun(a);
    return 0;
}

by OrayRofn @ 2024-01-22 20:25:52

@Y_QWQ_Y

感谢!后来意识到了 在主函数里面想办法把中间有零的给排除掉了! 写递归还是复杂了...

by OrayRofn @ 2024-01-22 20:30:13

@Zemu_Ooo

感谢!后来意识到了已经解决了!

|