基本思路 16转化8进制 需要先转化成二进制形式
1个16进制可以转化成4个二进制
3个二进制可以转化成一个八进制
具体方法:(1)定义2个字符串
()把16进制的数输入到其中一个字符串中去
()把16进制字符串中的每一个数分情况讨论 比如1为0001
()把s2中的字符每算一次就加一次
()把s2的每三个转化成一个八进制的数字
注意点:字符串中S2+="0011"就可以表述在S2 后面加上一个0011的字符
字符串中把每一个字符数字减去'0‘就表示成int’型的数字
2下面是一个16进制转化成10进制的操作
把16进制展开 每次计算的时候就*16加上当前的值
注释掉的是一个错误的答案,因为把位数搞反了 把第一位当成最后一位 16的0次方进行计算了。
1 #include <iostream> 2 #include <string> 3 #include <cmath> 4 using namespace std; 5 int main() 6 { 7 string s; 8 long long b=0; 9 int c; 10 cin>>s; 11 for(int i=0;i<s.size();i++) 12 { 13 c=s[i]-'0'; 14 /* if(c<10) 15 { 16 // b=b+c*pow(16,i); 17 b=b*16+c; 18 } 19 else 20 { 21 c=c-7; 22 /* b=b+c*pow(16,i); 23 b=b*16+ 24 }*/ 25 if(c>=10) 26 { 27 c=c-7; 28 } 29 b=b*16+c; 30 } 31 cout<<b; 32 return 0; 33 }
3.十进制转化成十六进制
这道题中的问题:主要是输入的时候的问题 long long 的用lld进行输入
#include <cmath> #include <iostream> #include <string> using namespace std; int main() { long long a; int y[100]; int i=0; scanf("%lld",&a); if(a==0) cout<<a; else{ while(a) { y[i]=a%16; //cout<<y[i]<<endl; i++; a=a/16; //cout<<a<<endl; } for(int j=i-1;j>=0;j--) { // cout<<y[j]<<endl; if(y[j]<10) { cout<<y[j];continue; } else if(y[j]==10) { cout<<'A';continue; } else if(y[j]==11) { cout<<'B';continue; } else if(y[j]==12) { cout<<'C';continue; } else if(y[j]==13) { cout<<'D';continue; } else if(y[j]==14) { cout<<'E';continue; } else cout<<'F'; } } return 0; }
4.十进制转化成八进制
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int n; 6 int a[100]; 7 int i=0; 8 cin>>n; 9 while(n) 10 { 11 a[i]=n%8; 12 n=n/8; 13 i++; 14 } 15 for(int j=i-1;j>=0;j--) 16 { 17 cout<<a[j]; 18 } 19 20 return 0; 21 }
这种计算十进制转化成其他进制的数就是把% / 后面的数对应成相应的数字就可以