題目描述:
本題要求計算 A/B,其中 A 是不超過 1000 位的正整數,B 是 1 位正整數。你需要輸出商數 Q 和餘數 R,使得 A=B×Q+R 成立。
輸入格式:
輸入在一行中依次給出 A 和 B,中間以 1 空格分隔。
輸出格式:
在一行中依次輸出 Q 和 R,中間以 1 空格分隔。
輸入樣例:
123456789050987654321 7
輸出樣例:
17636684150141093474 3
思想 :
模擬正常的除法運算,從最高位開始每位數字除以除數,若此時能除過,則將該位除的結果輸出,並對該位和除數取餘,該餘數和下一位數又組成一個數,繼續除以除數,若能除過則繼續上述步驟,否則商補0,向後借一位繼續上述步驟,直至被除數最後一位,並輸出餘數。
AC代碼:
#include <iostream>
#include <cstring>
using namespace std;
void division(char *A,int m)
{
int n = strlen(A);
int R;//餘數
int k = 0;
int t = 0;
bool flag = true;
for(int i = 0; i < n; i++)//A[0]爲最高位
{
t = t*10+(A[i]-'0');
if(t>=m)//被除數能除過時
{
cout<<t/m;
flag = false;
}
else if(!flag)//被處除數除不過,則向後借一位,同時該位補0(不包括商的最高位)
{
cout<<0;
}
t=t%m;
}
if(flag)
{
cout<<0;
}
cout<<" "<<t<<endl;
}
int main()
{
char A[1010];
int B;
cin>>A>>B;
division(A,B);
return 0;
}