PAT 乙级 1022.D进制的A+B C++/Java

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进制就可以了

 

C++实现:

 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 }

 

 Java实现:

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4     public static void main(String[] args) {
 5         Scanner in = new Scanner(System.in);
 6         int a = in.nextInt();
 7         int b = in.nextInt();
 8         int d = in.nextInt();
 9         in.close();
10         int sum = a + b;
11         String s = "";
12         int t = 0;
13         if(sum == 0){
14             System.out.print(sum);
15         }
16         while(sum > 0){
17             t = sum % d;
18             sum = sum / d;
19             s = t + s;
20         }
21         System.out.print(s);
22     }
23 }

 

 

posted @ 2019-10-05 16:39  47的菠萝~  阅读(205)  评论(0编辑  收藏  举报