如何解决十六进制到十进制转换器不起作用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;
}
解决方法
更简单的方法:
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’;
}
,
您可以像.gitignore
一样添加- '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;
}
这是解决问题的另一种方法。您可以使用在头文件std::hex
中定义的#include<iostream>
,这是一种更简单的方法。
例如:
#include <iostream>
int main()
{
int HexNum;
std::cin >> std::hex >> HexNum;
std::cout << HexNum << std::endl;
return 0;
}
输出:
10F
271
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。