问题描述
编程实现
#include<iostream>
#include<stack>
#include <vector>
#include <string>
using namespace std;
//进制转换
vector<char> Transf(int n, int r) {
vector<char> res;
stack<int> s;
while (n) {
s.push(n % r);
n /= r;
}
while (!s.empty()) {
switch (s.top()) {
case 10:
res.push_back('A');
break;
case 11:
res.push_back('B');
break;
case 12:
res.push_back('C');
break;
case 13:
res.push_back('D');
break;
case 14:
res.push_back('E');
break;
case 15:
res.push_back('F');
break;//这些都是为了能转化为十六进制。
default:
res.push_back(char(48 + s.top()));
break;
}
s.pop();
}
return res;
}
//计算函数
int TransfToDec(char c) {
int t = 0;
switch (c) {
case '0':
t = 0;
break;
case '1':
t = 1;
break;
case '2':
t = 2;
break;
case '3':
t = 3;
break;
case '4':
t = 4;
break;
case '5':
t = 5;
break;
case '6':
t = 6;
break;
case '7':
t = 7;
break;
case '8':
t = 8;
break;
case '9':
t = 9;
break;
case 'A':
t = 10;
break;
case 'B':
t = 11;
break;
case 'C':
t = 12;
break;
case 'D':
t = 13;
break;
case 'E':
t = 14;
break;
case 'F':
t = 15;
break;
}
return t;
}
//计算结果
int CalRes(vector<char> res) {
int sum = 0;
vector<char>::iterator it;
for (it = res.begin(); it != res.end(); ++it) {
sum += TransfToDec(*it);
}
return sum;
}
//容器遍历
void VecPrint(vector<char> res) {
vector<char>::iterator it;
for (it = res.begin(); it != res.end(); ++it) {
cout << char(*it) << " ";
}
}
//算法核心
void Alu(int n) {
vector<char> Dec = Transf(n, 10);
vector<char> Decax = Transf(n, 12);
vector<char> Hex = Transf(n, 16);
int DecRes = CalRes(Dec);
int DecaxRes = CalRes(Decax);
int HexRes = CalRes(Hex);
if (DecRes == DecaxRes && DecaxRes == HexRes) {
cout << n << " is a Sky Number." << endl;
} else {
cout << n << " is not a Sky Number." << endl;
}
}
int main() {
vector<int> v;
int n = -1;
while (cin >> n && n != 0) {
v.push_back(n);
}
vector<int>::iterator it;
for (it = v.begin(); it != v.end(); ++it) {
Alu(int(*it));
}
return 0;
}