天天看點

PAT乙級—1017. A除以B (20)-native

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

輸入格式:

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

輸出格式:

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

輸入樣例:

123456789050987654321 7

輸出樣例:

17636684150141093474 3

思路:此題在于模拟一個除法豎式的過程。建議寫一個除法在旁邊對照。

#include<iostream>
#include<string>
using namespace std;

int main()
{
    int AA[];
    string A;
    int Q[];    //儲存商 
    int B,R=;      //R為餘數 
    int k=;
    cin>>A>>B;
    for(int i=;i<A.length();i++)
    {
        AA[i]=A[i]-'0'; //将字元串轉換為數字數組 
    }
    int number=;   //組成新數字除以除數 
    for(int i=;i<A.length();i++)
    {
        if(A.length()==&&AA[i]<B)  //如果A是一位并且小于B的話,餘數為本身,商為0 
        {
            R=AA[i];
            Q[]=;
            cout<<Q[];
            break;
        }
        if(i==)//第一次計算餘數與剩餘計算餘數方法不同,故先算第一次 
        {
        Q[k++]=AA[i]/B;//先求商的第一位數
        R=AA[i]%B;  //餘數是R 
        number=(AA[i]-AA[i]/B*B)*+AA[i+];//上減下做十位,拿被除數下一位做各位 
        }
        else 
        {
            Q[k++]=number/B;
            R=number-number/B*B;
            number=(number-number/B*B)*+AA[i+];
        }   
    }
    if(Q[]!=) 
    cout<<Q[];
    for(int i=;i<k;i++)
    {
        cout<<Q[i];
    }
    cout<<" "<<R<<endl;
    return ;   
} 
           

題目連結:

https://www.patest.cn/contests/pat-b-practise/1017