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 }

 

 
posted @ 2018-10-15 19:06  T丶jl  阅读(147)  评论(0编辑  收藏  举报