十六进制到十进制转换器不工作 (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’;
}
因此,作为作业的一部分,我编写了一个将十六进制转换为十进制的程序。但是我没能得到想要的结果。有人可以指出此代码中的错误吗?
#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’;
}