小苏先生. 2023-11-05 14:50 采纳率: 100%
浏览 26
已结题

进制转换(有字母A~F)为16进制转为10进制

我想不出该该如何将A~F,作为一个占位去传入其中,只能想到普通的数字传入其中。我也尝试将输入的值变为string 类型 ,但输入时每个数字得需要空格 隔开
问题:
问题连接:https://edu.csdn.net/skill/program/70366?practiceId=37987636
请把输入的数字转换为十进制。 如果数字中只有0和1,那么就认为是二进制。 如果数字中只有0到7,那么就认为是八进制。 如果数字中有不止0到7,那么就认为是十六进制。 如果出现了0到9、A到F(不区分大小写)之外的字母,那么就请输出“NaN”。

img


这是我的做法:

img


这是我的源代码:

#include<iostream>
using namespace std;
#define A 10
#define B 11
#define C 12
#define D 13
#define E 14
#define F 15
int judgement(int n)
{
    
    int max = 0;
    while (n)
    {
        int current = 0;
        current = n % 10;
        n = n / 10;
        if (current > max || max == 0)
        {
            max = current;
        }
    }
    if (max >= 8)  return 1; //16进制
    if (max > 2 )  return 2; //8进制
    if (max <= 2)  return 3; //2进制
}
int solve(int num, int n)
{
    int sum = 0, index = -1;
    if (num == 1)
    {
        
        while (n)
        {
            int e = 1;
            int current = 0;
            index++;
            current = n % 10;
            n = n / 10;
            if (index == 0)
            {
                sum = current;
                continue;
            }
            for(int i = 0;i < index;i++)
            {               
                e *= 16;                
            }
            current *= e;
            sum += current;
        }
    }
    if (num == 2)
    {

        while (n)
        {
            int e = 1;
            int current = 0;
            index++;
            current = n % 10;
            n = n / 10;
            if (index == 0)
            {
                sum = current;
                continue;
            }
            for (int i = 0; i < index; i++)
            {
                e *= 8;
            }
            current *= e;
            sum += current;
        }
    }
    if (num == 3)
    {

        while (n)
        {
            int e = 1;
            int current = 0;
            index++;
            current = n % 10;
            n = n / 10;
            if (index == 0)
            {
                sum = current;
                continue;
            }
            for (int i = 0; i < index; i++)
            {
                e *= 2;
            }
            current *= e;
            sum += current;
        }
    }
    return sum;
}
int main()
{
    int n;
    cin >> n;
    int num = judgement(n);
    cout <<"属于3种情况中的:" << num << endl;
    int result = solve(num, n);
    cout << result << endl;
    return 0;
}


  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-05 16:44
    关注

    【以下回答由 GPT 生成】

    #include<iostream>
    #include<cmath>
    using namespace std;
    
    int solve(string num) {
        int base = 0;
        int result = 0;
    
        for (int i = num.length() - 1; i >= 0; i--) {
            int digit = 0;
    
            if (num[i] >= '0' && num[i] <= '9') {
                digit = num[i] - '0';
            } else if (num[i] >= 'A' && num[i] <= 'F') {
                digit = num[i] - 'A' + 10;
            } else {
                return -1;
            }
    
            result += digit * pow(16, base);
            base++;
        }
    
        return result;
    }
    

    上述代码是一个函数solve,接受一个参数num,该参数为一个字符串表示的数值。函数的功能是将该数值从十六进制转换为十进制,并返回结果。

    函数的具体过程如下: - 初始化baseresult变量,分别用于记录当前位数和计算最终结果。 - 通过循环从字符串的末尾开始遍历,对每一位进行处理。 - 判断当前位的数值类型,如果在0到9范围内,则直接将字符转换为整数,如果在A到F范围内,则将字符转换为对应的整数值(A对应10,B对应11,以此类推)。 - 将当前位的数值与16的base次方相乘,并累加到result中。 - 更新base的值,使其加一,继续处理下一位。 - 当遍历结束后,返回最终结果。

    下面是一个调用例子:

    #include<iostream>
    using namespace std;
    
    int main() {
        string input;
        cout << "请输入一个十六进制数字: ";
        cin >> input;
    
        int result = solve(input);
    
        if (result == -1) {
            cout << "NaN" << endl;
        } else {
            cout << "转换为十进制后的结果为: " << result << endl;
        }
    
        return 0;
    }
    

    这段代码首先提示用户输入一个十六进制数字,然后调用上述的solve函数将其转换为十进制,并输出结果。如果输入的数字中包含除了0到9、A到F之外的字符,则输出"NaN"。

    希望以上解答对你有帮助,如果有任何疑问,请随时提问。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月16日
  • 已采纳回答 11月8日
  • 创建了问题 11月5日

悬赏问题

  • ¥15 Matlab在app上输入带有矩阵形式的初始条件发生错误
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址
  • ¥15 elmos524.33 eeprom的读写问题
  • ¥15 用ADS设计一款的射频功率放大器