openjudge 1.5数字反转题提交显示错误,C语言问题

问题:在openjudge上运行错误,但是看不出代码哪里有问题?在Devc++上也能运行

描述
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。

输入
输入共 1 行,一个整数N。

-1,000,000,000 ≤ N≤ 1,000,000,000。
输出
输出共 1 行,一个整数,表示反转后的新数。
样例输入
样例 #1:
123

样例 #2:
-380
样例输出
样例 #1:
321

样例 #2:
-83

#include<stdio.h>
#include<math.h>
int main()
{
    long n;
    scanf("%ld",&n);
    if(n==0)
    {printf("%d",n);}
    else
    {
        if(n%10==0)
        {n/=10;}
        while(n)
        {
            printf("%d",n%10);
            n/=10;
            if(n<0)
            {
                n=-n;
            }
        }
    }
    return 0;
}

用int 型就满足题目要求,修改如下,供参考:

#include <stdio.h>
#include <math.h>
int main()
{
    int  n, k = 0, flg = 1;   // 修改
    scanf("%ld", &n);
    if (n == 0)
    {
        printf("%d", n);
    }
    else
    {
        if (n < 0){
            n = -n;
            flg = -1; // 修改
        }
        //if (n % 10 == 0)
        //{
        //    n /= 10;
        //}
        while (n)
        {
            k = k * 10 + n % 10;
            //printf("%d", n % 10);
            n /= 10;
        }
        printf("%d", k * flg);
    }
    return 0;
}

【以下回答由 GPT 生成】

在Openjudge上运行出错的问题是代码中的格式化字符串不正确。在代码中,使用了%d来格式化输出,但是实际上应该使用%ld来格式化输出long类型的数值。因此,需要将printf("%d", n%10);改为printf("%ld", n%10);,以正确输出结果。以下是修改后的代码:

#include <stdio.h>
#include <math.h>

int main()
{
    long n;
    scanf("%ld",&n);
    if(n == 0)
    {
        printf("%ld",n);
    }
    else
    {
        if(n%10 == 0)
        {
            n/= 10;
        }
        while(n)
        {
            printf("%ld",n%10);
            n/=10;
            if(n < 0)
            {
                n = -n;
            }
        }
    }
    return 0;
}


【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^