本題要求計算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