PAT-乙级-1017 A除以B
本题要求计算A /B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
分析:
模拟手工除法,即从最高位开始,按照笔算的方法计算
注意在计算商时开头的0应该舍去
在处理舍去的要权衡一个特例:一位数除以一位数不够除,商为0
1 //c++
2 #include<iostream>
3 #define LEN 1005
4 using namespace std;
5
6 int main(){
7 char A[LEN],Q[LEN];
8 int B,R=0;
9 cin>>A>>B;
10 int i=0,j=0;
11 while(A[i]!='\0'){
12 R=R*10+A[i++]-'0';
13 if(R<B){
14 //这个位置卡一个特殊值:一位数除以一位数
15 if(j||A[i]=='\0')
16 Q[j++]='0';
17 }
18 else{
19 Q[j++]=R/B+'0';
20 R%=B;
21 }
22 }
23 Q[j]='\0';
24 cout<<Q<<' '<<R;
25 return 0;
26 }