C++实现Sky数

问题描述

在这里插入图片描述
在这里插入图片描述

编程实现

#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;
}


结果显示

在这里插入图片描述

发布了115 篇原创文章 · 获赞 29 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/SoftpaseFar/article/details/103328842
sky
今日推荐