[PAT Basic] 1022.D进制的A+B

Posted 47pineapple

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PAT Basic] 1022.D进制的A+B相关的知识,希望对你有一定的参考价值。

1022 D进制的A+B (20 分)

输入两个非负 10 进制整数 A 和 B (≤),输出 A+B 的 D (1)进制数。

输入格式:

输入在一行中依次给出 3 个整数 A、B 和 D。

输出格式:

输出 A+B 的 D 进制数。

输入样例:

123 456 8

输出样例:

1103

进制转换(P进制转Q进制):

步骤:

1. 将P进制数转成10进制

给定一个2进制数1011,将其转成10进制: $1*10^3 + 1*10^2 +0*10^1+1*10^0$ = 11

C++实现:

 1 // P进制转10进制
 2 int PtoTen(int x, int P)
 3 {
 4     int result = 0;
 5     int product = 1;
 6     while (x != 0)
 7     {
 8         result = result + (x % 10) * product;
 9         x = x / 10;
10         product = product * P;
11     }
12     return result;
13 }

 

 

2.将10进制数转成Q进制

采用“除基(Q)取余法”

给定一个10进制数:17,将其转成2进制

17 / 2 = 8, 余1

8 / 2 = 4 余0

4 / 2 = 2 余0

2 / 2 = 1 余0

1 / 2 = 0 余1

计算结束

接着将余数从后往前(从下往上)输出,得到的10001就是17的二进制数

C++实现

 1 // 10进制转Q进制
 2 void tenToQ(int x, int Q)
 3 {
 4     vector<int> left;    //保存余数
 5     do 
 6     {
 7         left.push_back(x % Q);
 8         x /= Q;
 9     } while (x != 0);
10     //反向输出余数
11     for (auto it = left.rbegin(); it != left.rend(); ++it)
12     {
13         cout << *it;
14     }
15 }

 

注意:用do while是因为,如果10进制数恰好等于0,应该输出余数0,如果是while循环,则不会保存余数

 

题目分析:

将A和B相加,再按照上面的内容转化成D进制就可以了

 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4 
 5 void tenToQ(int x, int Q)
 6 {
 7     vector<int> left;
 8     do 
 9     {
10         left.push_back(x % Q);
11         x /= Q;
12     } while (x != 0);
13 
14     for (auto it = left.rbegin(); it != left.rend(); ++it)
15     {
16         cout << *it;
17     }
18 }
19 
20 int main()
21 {
22     int A, B, D;
23     cin >> A >> B >> D;
24     tenToQ(A + B, D);
25     return 0;
26 }

 

 

 



以上是关于[PAT Basic] 1022.D进制的A+B的主要内容,如果未能解决你的问题,请参考以下文章

PAT乙级 1022. D进制的A+B (20)

PAT乙级1022.D进制的A+B(20 分)

PAT 1022 D进制的A+B

PAT 1022. D进制的A+B (20)

PAT-进制转换-B1022 D进制的A+B (20分)

[PAT乙级]1022 D进制的A+B