紧接着十进制转二进制,八进制,十六进制-CSDN博客这篇文章
输入一个二进制,八进制的数,怎样能转化为十进制呢?
原理如下:
K进制转十进制
按权相加法展开成一个多项式,每项是该位的数码与相应的权之积,把多项式按十进制数的规则进行求和,所得结果即是该数的十进制。
公式:abcd.efg(K)=d*K^0+c*K^1+b*K^2+a*k^3+e*K^-1+f*K^-2+g*K^-3(10)
例:1101.01(2)=1*2^0+0*2^1+1*2^2+1*2^3+0*2^-1+1*2^-2=1+0+4+8+0+0.25=13.25(10)
C知道的回答:
在C++中,可以使用以下方法将二进制数转换为十进制数:
使用字符串流(stringstream): 首先,将二进制数作为字符串输入到字符串流中,然后使用字符串流的输入运算符(>>)将其转换为十进制数。
#include <iostream> #include <sstream> using namespace std; int binaryToDecimal(string binary) { stringstream ss; ss << binary; int decimal = 0; ss >> decimal; return decimal; } int main() { string binary = "101010"; int decimal = binaryToDecimal(binary); cout << "Decimal: " << decimal << endl;//编者注:?答案=输入 return 0; }
使用位运算: 可以使用位运算符和循环来逐位计算二进制数的十进制值。
#include <iostream> using namespace std; int binaryToDecimal(string binary) { int decimal = 0; int power = 1; for (int i = binary.length() - 1; i >= 0; i--) { if (binary[i] == '1') { decimal += power; } power *= 2; } return decimal; } int main() { string binary = "101010"; int decimal = binaryToDecimal(binary); cout << "Decimal: " << decimal << endl; return 0; }
如果懂得原理的话可以用,我又编了一段易理解的代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int k,n,a,b,c,d,e,f,g,h,i,j;
cout<<"请输入数的进制(2或8):";
cin>>k;
if(k==2){
cout<<"请输入一个二进制整数:";
cin>>n;
}
if(k==8){
cout<<"请输入一个八进制整数:";
cin>>n;
}
a=n/1%10;
b=n/10%10;
c=n/100%10;
d=n/1000%10;
e=n/10000%10;
f=n/100000%10;
g=n/1000000%10;
h=n/10000000%10;
i=n/100000000%10;
j=n/1000000000%10;
cout<<"转换后的二进制(B)数为:";
cout<<a*1+b*k+c*k*k+d*k*k*k+e*k*k*k*k+f*k*k*k*k*k+g*k*k*k*k*k*k+h*k*k*k*k*k*k*k+i*k*k*k*k*k*k*k*k+j*k*k*k*k*k*k*k*k*k;
return 0;
}
那十六进制转十进制呢?
C知道的回答:
在C++中,可以使用以下方法将十六进制数转换为十进制数:
使用标准库函数: 可以使用
std::stoi
函数将十六进制字符串转换为十进制整数。例如:#include <iostream> #include <string> int main() { std::string hexStr = "1A"; int decimalNum = std::stoi(hexStr, nullptr, 16);//编者注:?此处有报错 std::cout << "Decimal: " << decimalNum << std::endl; return 0; }
输出结果为:Decimal: 26
使用自定义函数: 可以编写自定义函数来将十六进制数转换为十进制数。例如:
#include <iostream> #include <string> int hexToDecimal(std::string hexStr) { int decimalNum = 0; int base = 1; int size = hexStr.size(); for (int i = size - 1; i 0; i--) { //编者注:此处有误,应该为:for(int i=size-1;i>=0;i--) if (hexStr[i] >= '0' && hexStr[i] <= '9') { decimalNum += (hexStr[i] - '0') * base; } else if (hexStr[i] >= 'A' && hexStr[i] <= 'F') { decimalNum += (hexStr[i] - 'A' + 10) * base; } else if (hexStr[i] >= 'a' && hexStr[i] <= 'f') { decimalNum += (hexStr[i] 'a' + 10) * base; //编者注:此处有误,应该为:decimalNum+=(hexStr[i]='a'+10)*base; } base *= 16; } return decimalNum; } int main() { std::string hexStr = "1A"; int decimalNum = hexToDecimal(hexStr); std::cout << "Decimal: " << decimalNum << std::endl; return 0; }
输出结果为:Decimal: 26
(C知道的回答不包括编者注,编者注为编者后期发现的错误)
最后代码:
#include<bits/stdc++.h>
using namespace std;
int hexToDecimal(std::string hexStr) {
int decimalNum = 0;
int base = 1;
int size = hexStr.size();
for (int i = size - 1; i >= 0; i--) {
if (hexStr[i] >= '0' && hexStr[i] <= '9') {
decimalNum += (hexStr[i] - '0') * base;
} else if (hexStr[i] >= 'A' && hexStr[i] <= 'F') {
decimalNum += (hexStr[i] - 'A' + 10) * base;
} else if (hexStr[i] >= 'a' && hexStr[i] <= 'f') {
decimalNum += (hexStr[i] = 'a' + 10) * base;
}
base *= 16;
}
return decimalNum;
}
int main(){
int k,a,b,c,d,e,f,g,h,i,j;
cout<<"请输入数的进制(2,8或16):";
cin>>k;
if(k==2){
int n;
cout<<"请输入一个二进制(B)整数:";
cin>>n;
a=n/1%10;
b=n/10%10;
c=n/100%10;
d=n/1000%10;
e=n/10000%10;
f=n/100000%10;
g=n/1000000%10;
h=n/10000000%10;
i=n/100000000%10;
j=n/1000000000%10;
cout<<"转换后的十进制(D)数为:";
cout<<a*1+b*k+c*k*k+d*k*k*k+e*k*k*k*k+f*k*k*k*k*k+g*k*k*k*k*k*k+h*k*k*k*k*k*k*k+i*k*k*k*k*k*k*k*k+j*k*k*k*k*k*k*k*k*k;
}
if(k==8){
int n;
cout<<"请输入一个八进制(O)整数:";
cin>>n;
a=n/1%10;
b=n/10%10;
c=n/100%10;
d=n/1000%10;
e=n/10000%10;
f=n/100000%10;
g=n/1000000%10;
h=n/10000000%10;
i=n/100000000%10;
j=n/1000000000%10;
cout<<"转换后的十进制(D)数为:";
cout<<a*1+b*k+c*k*k+d*k*k*k+e*k*k*k*k+f*k*k*k*k*k+g*k*k*k*k*k*k+h*k*k*k*k*k*k*k+i*k*k*k*k*k*k*k*k+j*k*k*k*k*k*k*k*k*k;
}
if(k==16){
std::string hexStr;
std::cout<<"请输入一个十六进制(H)整数:";
std::cin>>hexStr;
int decimalNum = hexToDecimal(hexStr);
std::cout << "转换后的十进制(D)数为:" << decimalNum;
}
return 0;
}
样例运行结果: