进制转换:十六进制转八进制、十六进制转十进制

在十六进制转为八进制的过程中包含了将十六进制转化为二进制以及将二进制转化为八进制!

我自己测试是没什么问题,但是在蓝桥杯官网的测试系统就显示运行错误qwq
不知道为什么
附代码:

#include<iostream>
#include<string.h>
using namespace std;
int main()
{
	string code1(char p);
	string code2(char a,char b,char c);
	int i,n,j,flag;
	cin>>n;
	string sixteen[n],two[n],eight[n];
	char twoo[n][1000],eightt[n][1000];
	int len1[n],len2[n];
	for(i=0;i<n;i++)
		cin>>sixteen[i];
	for(i=0;i<n;i++)
	{
		len1[i] = sixteen[i].length();
		for(j=0;j<len1[i];j++)
			two[i] = two[i] + code1(sixteen[i][j]);
		len2[i] = two[i].length();
		for(j=0;j<=len2[i];j++)
			twoo[i][j] = two[i][j];
		if(len2[i]%3==1)
		{
			for(j = len2[i]+1;j>=0;j--)
				twoo[i][j] = twoo[i][j-2];
			twoo[i][1] = twoo[i][0] = '0';
		}
		if(len2[i]%3==2)
		{
			for(j = len2[i];j>=0;j--)
				twoo[i][j] = twoo[i][j-1];
			twoo[i][0] = '0';
		}
		for(j=0;j<len2[i];j=j+3)
			eight[i] = eight[i] + code2(twoo[i][j],twoo[i][j+1],twoo[i][j+2]);	
		for(j=0;j<len2[i];j++)
			eightt[i][j] = eight[i][j];

		for(j=0;j<eight[i].length();j++)
			if(eight[i][j]!='0'){
				flag = j;break;
			}
		for(j=flag;j<eight[i].length();j++)
			cout<<eight[i][j];	
		cout<<endl;	
	}			
	return 0;	
}


string code2(char a,char b,char c)
{
	if(a=='0'&&b=='0'&&c=='0')  return("0");
	if(a=='0'&&b=='0'&&c=='1')  return("1");
	if(a=='0'&&b=='1'&&c=='0')  return("2");
	if(a=='0'&&b=='1'&&c=='1')  return("3");
	if(a=='1'&&b=='0'&&c=='0')  return("4");
	if(a=='1'&&b=='0'&&c=='1')  return("5");
	if(a=='1'&&b=='1'&&c=='0')  return("6");
	if(a=='1'&&b=='1'&&c=='1')  return("7");		
}


string code1(char p)
{
	if(p == '0')   return("0000");
	if(p == '1')   return("0001");
	if(p == '2')   return("0010");
	if(p == '3')   return("0011");
	if(p =='4')    return("0100");
	if(p == '5')   return("0101");
	if(p == '6')   return("0110");
	if(p == '7')   return("0111");
	if(p == '8')   return("1000");
	if(p == '9')   return("1001");
	if(p == 'A')   return("1010");
	if(p == 'B')   return("1011");
	if(p == 'C')   return("1100");
	if(p == 'D')   return("1101");
	if(p == 'E')   return("1110");
	if(p == 'F')   return("1111");
}

还有十六进制转化为十进制的,这个就比较简单了

#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
	long long sum=0;
	char pp[100];
	scanf("%s",&pp);
	int len;	
	len = strlen(pp);
	for(int i=0;i<len;i++)
	{
		if(pp[i]>='0'&&pp[i]<='9')
		sum = sum + (pp[i]-48)*pow(16,len-i-1);
		if(pp[i] == 'A')
		sum = sum + 10*pow(16,len-i-1);
		if(pp[i] == 'B')
		sum = sum + 11*pow(16,len-i-1);
		if(pp[i] == 'C')
		sum = sum + 12*pow(16,len-i-1);
		if(pp[i] == 'D')
		sum = sum + 13*pow(16,len-i-1);
		if(pp[i] == 'E')
		sum = sum + 14*pow(16,len-i-1);
		if(pp[i] == 'F')
		sum = sum + 15*pow(16,len-i-1);
	 } 
	printf("%I64d",sum);
	return 0;
 } 

最近一直在划水,我的300元报名费要打水漂了呜呜呜

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值