簡単だと思って、普通にプログラムを書くと、なぜかWrong Answer。
#include
int main(void) {
long long a,b;
while(scanf("%lld%lld",&a,&b)==2) {
printf("%lld\n",a+b);
}
return 0;
}
#include
int main(void) {
int a,b;
while(scanf("%d%d",&a,&b)==2) {
printf("%d\n",a+b);
}
return 0;
}
わけがわからないよ。
オーバーフローしていることを確認するために、次のプログラムを投げてみました。
#include
#include
int main(void) {
long long a,b;
while(scanf("%lld%lld",&a,&b)==2) {
if(a+b>(long long)INT_MAX || a+b<(long long)INT_MIN)return 1;
printf("%lld\n",a+b);
}
return 0;
}
問題文に書いてあるとおりの仕様を実装すると間違っていると言われるなんて、わけがわかりません。
みんなはこの意地悪な引っ掛け問題についてどう思いますか?
コメント大募集です。
オフトピック
「integers」には32ビットという意味は無いよな?な?な?な?な?
とりあえずlong longでもオーバーフローする可能性があるというツッコミはなしで。
とりあえずlong longでもオーバーフローする可能性があるというツッコミはなしで。
AOJのWeb Boardに書き込んだところ、int型でオーバーフローしないデータに修正していただけたようです。