问题:在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;
}
【相关推荐】