标签:justify void text ali stream font otto ++ nba
输入两个非负 10 进制整数 A 和 B (≤),输出 A+B 的 D (1)进制数。
输入在一行中依次给出 3 个整数 A、B 和 D。
输出 A+B 的 D 进制数。
123 456 8
1103
给定一个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 }
采用“除基(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 }
标签:justify void text ali stream font otto ++ nba
原文地址:https://www.cnblogs.com/47Pineapple/p/11625035.html