十六进制转八进制

1.先转化为二进制

#include<iostream>
using namespace std;  
int main()   
{   
	int n,m,i,j,k;
	cin>>n;
	string sixteen[10];
	for(i=0;i<n;i++){
		cin>>sixteen[i];
	}
	for(i=0;i<n;i++){
		string tow;
		string eight;
		char eig;
		for(j=0;j<sixteen[i].size();j++){//注意什么时候用单引号什么时候用双引号
			switch(sixteen[i][j]){
				case '0':tow+="0000";break;
                case '1':tow+="0001";break;
                case '2':tow+="0010";break;
                case '3':tow+="0011";break;
                case '4':tow+="0100";break;
                case '5':tow+="0101";break;
                case '6':tow+="0110";break;
                case '7':tow+="0111";break;
                case '8':tow+="1000";break;
                case '9':tow+="1001";break;
                case 'A':tow+="1010";break;
                case 'B':tow+="1011";break;
                case 'C':tow+="1100";break;
                case 'D':tow+="1101";break;
                case 'E':tow+="1110";break;
                case 'F':tow+="1111";break;
                default:break;
				}
			}
			m=tow.size()%3;//用“0”补齐位数(属于字符串所以用双引号)
			if(m==1)
			tow.insert(0,"00");
			else if(m==2)
			tow.insert(0,"0");
    if(!(tow[0]=='0'&&tow[1]=='0'&&tow[2]=='0'))//很重要,用来去除首位0
            {
            eig=(tow[0]-'0')*4+(tow[1]-'0')*2+(tow[2]);
            eight=eight+eig;
            }
			for(k=3;k<tow.size();k=k+3){
				if(tow.substr(k,3)=="000")
					eight+="0";
				else if(tow.substr(k,3)=="001")
					eight+="1";
				else if(tow.substr(k,3)=="010") 
					eight+="2";
				else if(tow.substr(k,3)=="011")
					eight+="3";
				else if(tow.substr(k,3)=="100")
					eight+="4";
				else if(tow.substr(k,3)=="101")
					eight+="5";
				else if(tow.substr(k,3)=="110")
					eight+="6";
				else if(tow.substr(k,3)=="111")
					eight+="7";
				}
			cout<<eight<<endl;
		}
	return 0;
}



2.先转为十进制(编译器测试正确然而练习系统给了我0分2333)
#include <stdio.h> 
#include <string.h>  
#include <math.h>
#include<iostream>
using namespace std;  
int main()   
{   
	int n,j;
	scanf("%d",&n);
	long long a[n];
	string strHex[10];
	int i, len = 0, temp = 0;  
	long long nDec = 0;  
	for(j=0;j<n;j++){	    
	    cin>>strHex[j];    
	    for (i = 0; strHex[j][i] != '\0'; i++)  
	    {  
	    	len = strHex[j].size();
	        switch(strHex[j][i])  
	        {  
	        case 'A': temp = 10; break;  
	        case 'B': temp = 11; break;  
	        case 'C': temp = 12; break;  
	        case 'D': temp = 13; break;  
	        case 'E': temp = 14; break;  
	        case 'F': temp = 15; break;  
	        default: temp = strHex[j][i]-'0'; break;  
	        }  
	        nDec += (temp*pow(16,len-1-i));  
	    } 
		a[j]=nDec;
		nDec=0;		 
	}
	for(j=0;j<n;j++){
		printf("%o\n",a[j]);
	}
    return 0;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值