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

Posted clindhu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT乙级 1017 A除以B (20分)相关的知识,希望对你有一定的参考价值。

本题要求计算 /,其中 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分)的主要内容,如果未能解决你的问题,请参考以下文章

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

PAT乙级1017

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

[PAT乙级]1017 A除以B

PAT 1017. A除以B (20)

PAT乙级1049 数列的片段和 (20 分)