题目描述:
本题要求计算 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;
}