为什么会发生"runtime error on text 1"?

  • 本文关键字:on error text runtime c
  • 更新时间 :
  • 英文 :

#include<stdio.h>
inline long long int abs(long long int a){
if(a>=0) return a;
return -a;  
}
inline long long int MIN(long long int a,long long int b){
return a<b?a:b;
}
int main(){
int t;
scanf("%d",&t);

for(int j=0;j<t;j++){
long long int a,b;
scanf("%lld%lld",&a,&b);
long long int sub=abs(a-b);
long long int min=MIN(a,b);
long long int i=0;
while(a%sub||b%sub) {
if(i>=min) break;
i++;a++;b++;
}
min=MIN(i,min);

printf("%lld %lld",sub,min);
}
return 0;
}
Input
4
8 5
1 2
4 4
3 9
Checker Log
Exit code is -1073741676

我认为我的代码是完美的,它在我的IDE中运行得很好,但在codeforce中超过十次,它说在文本1上有一个运行时错误。我不知道为什么。

a == b,abs返回0,然后这里有一个除0:(a % sub || b % sub)触发问题

在C中除以0是未定义的行为(谷歌这个术语),这解释了为什么在某些环境中你可以摆脱它,而在其他环境中程序停止。

这是你的程序的修改版本,它使这一点更清楚:

  • 我将abs重命名为myabs,否则abs与标准^absfunction fromstdlib.hwhich is needed for theexit '函数相冲突
  • 我添加了一个检查,如果a == b,程序停止。

#include<stdio.h>
#include<stdlib.h>
inline long long int myabs(long long int a) {
if (a >= 0) return a;
return -a;
}
inline long long int MIN(long long int a, long long int b) {
return a < b ? a : b;
}
int main() {
int t;
scanf("%d", &t);
for (int j = 0; j < t; j++) {
long long int a, b;
scanf("%lld%lld", &a, &b);
if (a == b)
{
printf("nBummer.n");
exit(1);
}
long long int sub = myabs(a - b);
long long int min = MIN(a, b);
long long int i = 0;
while (a % sub || b % sub) {
if (i >= min) break;
i++; a++; b++;
}
min = MIN(i, min);
printf("%lld %lld", sub, min);
}
return 0;
}

最新更新