#include<iostream>
using namespace std;
int main()
{
int a,b;
int n;
scanf("%d",&n);
while(n--){
scanf("%d%d",&a,&b);
if(b%a!=0)cout<<"-1"<<endl;
else cout<<a<<' '<<b<<endl;
}}
我只是把cin改成scanf就acㄌ
難道zerojudge不接受cin?
#include
using namespace std;
int main()
{
int a,b;
int n;
scanf("%d",&n);
while(n--){
scanf("%d%d",&a,&b);
if(b%a!=0)cout<<"-1"<
else cout<<<' '<<
}}
我只是把cin改成scanf就acㄌ
難道zerojudge不接受cin?
#include
using namespace std;
int main()
{
int a,b;
int n;
scanf("%d",&n);
while(n--){
scanf("%d%d",&a,&b);
if(b%a!=0)cout<<"-1"<
else cout<<<' '<<
}}
我只是把cin改成scanf就acㄌ
難道zerojudge不接受cin?
經過一番研究之後,發現第五筆的測試資料的確超出了 int 的範圍(抱歉我的疏忽),因此程式改用 long long 就會過了。而這筆的答案是 -1,使用 scanf 讀取時,程式雖然讀到了一個爆掉的數字,但是無法偵測出這個狀況,仍傻傻地用錯誤的數字來計算,只是算出來的結果仍然是 -1,所以程式反而會 AC。但是 cin 是一個比較「高檔」的輸入指令,當它讀到一個太大的數字時,會設定 cin 的 failbit,表示讀取失敗,在還沒有用 cin.clear() 清除 failbit 之前,接下來所有的 cin 讀取動作都會跳過,導致程式一直延用第五筆所讀入的測試資料,也會一直輸出 -1。而第五筆及第六筆的正確的案都是 -1,所以都通過了測試,但是第七筆的答案不是 -1,所以就在那筆 WA 了。cin 提供了一個 fail() 成員函數讓程式可以偵測這種情況並加以解決,你可以在 cin 指令之後加上「 if (cin.fail()) cin.clear();」以發現錯誤並清除 failbit。Pascal 則是發現輸入數字太大時,直接產生執行時期錯誤並跳出程式。現在測資已經更正,並為所有的 WA (line:7) 及 RE (code:106) 重測。非常感謝各位先進所提供的資訊,也讓我在此學到了不同語言在處理輸入錯誤時的不同方式。