十六进制到十进制转换器不工作 (c++)

Hexadecimal to decimal converter not working (c++)

因此,作为作业的一部分,我编写了一个将十六进制转换为十进制的程序。但是我没能得到想要的结果。有人可以指出此代码中的错误吗?

#include<bits/stdc++.h>
#include<math.h>
using namespace std;

int hexaToDecimal(string n){
    int ans = 0;
    int power =1;
    int s = n.size();

    for(int i=s-1; i>=0; i--){
        if(n[i] >= '0' && n[i] <= '9'){
            ans = ans + power*(n[i]);
        }
        else if(n[i] >= 'A' && n[i] <= 'F'){
            ans = ans + power*(n[i]-'A' + 10);
        }
        power = power * 16;
    }
    return ans;
}

        


int main(){
    string n;
    cin>>n;
    cout<<hexaToDecimal(n)<<endl;
    return 0;
}

您可以添加 - '0'- 'A'。 有代码:

#include<bits/stdc++.h>
#include<math.h>
using namespace std;
int hexaToDecimal(string n){
    int ans = 0;
    int power =1;
    int s = n.size();

    for(int i=s-1; i>=0; i--){
        if(n[i] >= '0' && n[i] <= '9'){
            ans = ans + power*(n[i] - '0'); //THERE.
        }
        else if(n[i] >= 'A' && n[i] <= 'F'){
            ans = ans + power*(n[i]-'A' + 10);
        }
        power = power * 16;
    }
    return ans;
}

        


int main(){
    string n;
    cin>>n;
    cout<<hexaToDecimal(n)<<endl;
    return 0;
}

仅在 //THERE.

附近有变化

这是解决您问题的另一种方法。您可以使用头文件 #include<iostream> 中定义的 std::hex,这是一种更简单的方法。

例如:

#include <iostream>


int main()
{
    int HexNum;
    std::cin >> std::hex >> HexNum;
    std::cout << HexNum << std::endl;

    return 0;
}

输出:

10F
271

更简单的方法:

unsigned fromHex(const string &s) { 
    unsigned result = 0;
    for (char c : s) 
        result = result << 4 | hexDigit(c);
    return result;
}

unsigned hexDigit(char c) { 
    return c > ‘9’ ? c - ‘A’ + 10: c - ‘0’;
}