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