码迷,mamicode.com
首页 > 其他好文 > 详细

PAT乙级 1017 A除以B (20分)

时间:2020-07-07 19:46:45      阅读:42      评论:0      收藏:0      [点我收藏+]

标签:ram   amp   text   除法   ++   -o   time   注意   div   

本题要求计算 /,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。

输入格式:

输入在一行中依次给出 A 和 B,中间以 1 空格分隔。

输出格式:

在一行中依次输出 Q 和 R,中间以 1 空格分隔。

输入样例:

123456789050987654321 7
 

输出样例:

17636684150141093474 3

思路:
看到输入样例这么长,则可以猜到输入必定是通过string 进行输入的,如果是string类型进行输入,则需要考虑这么个类似的情况: 00011454,即数字第一位可以为0,甚至可以一直为0。
同样值得注意的是,如果B为9,而A为8,A < B,那么此时A/B是没有整数部分的,此时先输出一个0,而后R直接输出,具体代码如下
 1 #include <iostream>
 2 using namespace std;
 3 int main(){
 4     string A;
 5     int R,B,Q;
 6     int i = 0;
 7     cin >> A >> B;
 8     for(int k = 0; k < A.length(); k++){
 9         if(A[k] - 0 != 0){
10             i = k;
11             break;
12         }
13     }
14     R = A[i] - 0;
15     if(R < B && i == A.length() - 1){
16         cout << "0 " << R;
17         return 0;
18     }
19     while(++i < A.length()){
20         R = R * 10 + (A[i] - 0);
21         cout << R / B;
22         R %= B;
23     }
24     cout << " " << R;
25     return 0;
26 }

 

值得学习的是:

模拟我们正常除法的算法为:

1     while(++i < A.length()){
2         R = R * 10 + (A[i] - 0);
3         cout << R / B;
4         R %= B;
5     }

R/B取出写在上面的数字,R%B取出每一次除不尽时的余数,留作下一次使用

PAT乙级 1017 A除以B (20分)

标签:ram   amp   text   除法   ++   -o   time   注意   div   

原文地址:https://www.cnblogs.com/ClinDHU/p/13262596.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!