【算法】十进制转换成二十六进制

输入一个整数,要求输出对应字母,举例:27输出AA。
题目看起来很简单,我们立马能想到的办法是进行 / % 输出对应结果。
可能很快写出这样的错误代码:
注意A的ascial 是65 小写97 ,此处我们是从64开始添加的。

string numberToSystem26Str(int n) {
    string s = string();
    int number = n;
    while (n>0) {
        s = char(n%26+64) +s;
        n = n/26;
    }
    cout<< number << s<<endl;
    return s;
}

此时注意: 对于边界情况的考虑,比如26 ,输出就会发生异常,输出A@,很明显不是我们想要的。我们能想到的就是进位的时候对于整数的情况考虑一下。
我们可能会考虑%27 不就是正好了,27 %27 =0 ,会影响我们的输出。最好的办法还是调整一下%26=0,调整对应字母。
然后变成:
对于进位,求下一个大的数我们可能会使用直接/的方法,又会出现问题。

string numberToSystem26Str(int n) {
    string s = string();
    int number = n;
    while (n>0) {
        int m = n%26;
        if(m==0) m = 26;
        s = char(m+64) +s;
        n = n/26;
    }
    cout<< number << s<<endl;
    return s;
}

输入26的时候,我们会发现输出AZ,多输出了以为,那怎么样才能规避这个问题呢。 能够%=0,且数值n>0,我们调整一下n的大小。

string numberToSystem26Str(int n) {
    string s = string();
    int number = n;
    while (n>0) {
        int m = n%26;
        if(m==0) m = 26;
        s = char(m+64) +s;
        if(m ==26) n=n-1;
        n = n/26;
    }
    cout<< number << s<<endl;
    return s;
}

最后给一个精简版的答案。

优化答案

string numberToSystem26Str(int n){
    string s = string();
    int temp =n;
    while (n > 0){
        int m = n % 26;
        if (m == 0) m = 26;
        s = (char)(m + 64) + s;
        n = (n-m) / 26;
    }
    cout<<temp<< s<<endl;
    return s;
}

可以看到,题目要求一点都不难,但是需要注意的细节特别多。
%的时候,刚好%=0 的情况
/ 的时候,当%=0, 会不会影响循环条件,是否进行进位。导致输出结果有误。
短短的15分钟面试时间,白板的情况下,考虑所有的边界情况,写出完整的答案,还是非常有难度的,平时要多准备才能以不变应万变。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一个跨平台的GUI应用程序开发框架,本身并没有提供直接实现IEEE 754二进制转换进制的双精度算法的功能或类。然而,Qt提供了丰富的数学函数和类,可以通过使用这些功能来实现这一算法。 要将IEEE 754二进制表示换为进制的双精度数,可以使用Qt的数学函数和类进行以下步骤: 1. 将二进制字符串换为进制: 可以使用Qt的QString类的toULongLong()函数将二进制字符串换为无符号长整型。 例如,QString binaryString = "11010"; unsigned long long decimalValue = binaryString.toULongLong(0, 2); 将二进制字符串"11010"换为进制数值26。 2. 将无符号长整型换为双精度浮点数: 使用Qt的QDoubleSpinBox类的setValue()函数以及tostring()函数将无符号长整型换为双精度浮点数,并将其设置为QDoubleSpinBox的值。 例如,QDoubleSpinBox doubleSpinBox; doubleSpinBox.setValue(static_cast<double>(decimalValue)); QString doubleString = doubleSpinBox.text(); 将进制数值26换为双精度浮点数,并将其设置为doubleSpinBox的值。 请注意,实际的算法可能需要考虑浮点数的精度、舍入和溢出等方面的问题,并使用更复杂的逻辑来实现换过程。此外,IEEE 754标准还涉及到特殊值(如无穷大和NaN)的处理,可能需要额外的代码来处理这些情况。 总的来说,虽然Qt本身没有内置的函数或类来直接实现IEEE 754二进制进制换,但可以通过使用Qt的数学函数和类,结合适当的算法和逻辑,来实现这个换过程。具体实现方式会根据具体需求和使用场景而有所不同。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值