紧接着十进制转二进制,八进制,十六进制-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;
}
样例运行结果: