【PAT乙級】1017 A除以B

陌巷舊雨發表於2020-10-21

問題描述
本題要求計算 A/B,其中 A 是不超過 1000 位的正整數,B 是 1 位正整數。你需要輸出商數 Q 和餘數 R,使得 A=B×Q+R 成立。

輸入格式
輸入在一行中依次給出 A 和 B,中間以 1 空格分隔。

輸出格式
在一行中依次輸出 Q 和 R,中間以 1 空格分隔。

樣例輸入
123456789050987654321 7

樣例輸出
17636684150141093474 3

分析
容易漏考慮 A<B 的情況

C++程式碼

#include<bits/stdc++.h>
using namespace std;
int main(){
    vector<char>c,q;
    char ch;
    while(~scanf("%c",&ch)){
        if(ch==' ') break;
        c.push_back(ch);
    }
    int b;
    cin>>b;
    int r;
    //易漏考慮的情況:
    if(c.size()==1&&c[0]-'0'<b){
        cout<<0<<" "<<c[0]-'0';
        return 0;
    }    
    while(!c.empty()){
        int a=c[0]-'0';
        c.erase(c.begin());
        if(c.empty()){
            r=a;
            break;
        }
        a=a*10+(c[0]-'0');
        r=a%b;
        cout<<a/b;
        c[0]=r+'0';
    }
    cout<<" ";
    cout<<r;
    return 0;
}

備註
一開始寫的是這個樣子,但是總是執行超時

    vector<char>c,q;
    while(true){
        char ch;
        cin>>ch;
        if(ch==' ') break;
        c.push_back(ch);
    }
    int b;
    cin>>b;

改成這個就好了

vector<char>c,q;
    char ch;
    while(~scanf("%c",&ch)){
        if(ch==' ') break;
        c.push_back(ch);
    }
    int b;
    cin>>b;

相關文章