华为机试:N进制减法

题目来源

题目描述

在这里插入图片描述

在这里插入图片描述

题目解析

这道题不难,考察两个知识点:

  • 第一:检查输入是否正确
  • 第二:进制计算
    • 我们先将数字转换为十进制
    • 然后用十进制计算出结果
    • 最后将结果转换为原进制
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <functional>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <map>
#include <random>
#include <ctime>
#include <iterator>

using namespace std;


class Solution{

private:
    // 检查是否合法
    bool checkRadix(int radix){
        return (radix >= 2 && radix <= 35);
    }

    bool checkNum(std::string &str){
        if(str.empty() ||
           (str.front() == '0' && str.size() != 1) ||
           str.size() > 100){
            return false;
        }

        if(str.front() == '0' && str.size() != 1){
            return false;
        }


        for(auto ch : str){
            if(!isdigit(ch) && !islower(ch)){
                return false;
            }
        }

        return true;
    }

private:
    // 1101
    // 十进制转换为N进制
    std::string ten2Nbase(int num, int N){
        char tmp[64] {0};
        itoa(num, tmp, N);
        return tmp;
    }

    // N进制转换为十进制
    int NBaseToTen(std::string &str, int radix){
        return strtol(str.c_str(), NULL, radix);
    }

    struct Info{
        int pos;
        std::string str;
        Info(int pos, std::string str):pos(pos), str(str){

        }
    };
    Info calN(int radix, std::string first, std::string second){
        // N进制转换为十进制
        int f1 = NBaseToTen(first, radix);
        int f2 = NBaseToTen(second, radix);
        int t = f1 - f2;
        return Info(t < 0 ? 1 : 0,ten2Nbase(t, radix));
    }


public:
    Info process(int radix, std::string first, std::string second){
        if(!checkRadix(radix) || !checkNum(first) || !checkNum(second)){
            return {-1, ""};
        }

        return calN(radix, first, second);
    }

};



int main(){
    Solution a;
    auto ans = a.process(2, "11", "1");
    std::cout << ans.pos << "\t" << ans.str <<"\n";
    ans = a.process(8, "07", "1");
    std::cout << ans.pos << "\t" << ans.str <<"\n";
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
n进制减法是指在n进制系统中进行减法运算。Python提供了对于n进制数的支持,可以通过将n进制数转化为十进制数来进行减法运算,最后将结果转化为n进制数表示。 首先,需要将n进制数转化为十进制数。假设要进行n进制数a减去n进制数b的运算,可以按照以下步骤进行: 1. 将n进制数a和b转化为对应的十进制数,可以使用int函数将字符串形式的n进制数转化为十进制数,指定进制基数为n。 a_decimal = int(a, n) b_decimal = int(b, n) 2. 进行十进制数的减法运算。 result_decimal = a_decimal - b_decimal 3. 将计算得到的十进制数转化为n进制数。可以使用内置bin(), oct(), hex()函数将十进制数转化为对应的二进制、八进制、十六进制字符串,可以使用自定义函数将十进制数转化为其他进制的字符串。 result_n = convert_to_n(result_decimal, n) # convert_to_n为自定义函数,将十进制数转化为n进制数 最后得到的result_n即为n进制减法运算的结果。 需要注意的是,对于n进制数的减法运算,需要确保被减数大于减数,否则结果可能会出现负数或不符合预期的情况。另外,在转化为十进制数进行减法运算时,需要确保n进制数的合法性,也就是各位数字都在0到n-1之间的范围内。 以上是利用Python进行n进制减法运算的基本步骤。在实际应用中,可以根据具体需求进行进一步优化或封装。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值