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

开始的想法:十六转十,十转八。写的时候发现转十的时候数太大,不行。

可行的思路:十六转二,二转八。可行。

#include<iostream>
#include<string>
#include<string.h>
#include<math.h>
#include<vector>
using namespace std;

string Six;
vector<int> Two;
int Eight[200000];	//想改进一下,变成动态存储。 

int main()		// 带"//"的为测试代码 
{
	int n;
	cin >> n;
	while(n--)
	{
		cin >> Six;
		int T, len = Six.size();
		for(int i = 0; i < len; i++)
		{//十六转二
			if(Six[i] <= 'F' && Six[i] >= 'A')
				T = Six[i] - 'A' + 10;
			else
				T = Six[i] - '0';
			int A[4], k = 0;
			while(k != 4)
			{
				A[k++] = T % 2;
				T = T / 2;
			}	//注意01的顺序  
			for(int j = 3; j >= 0; j--)
				Two.push_back(A[j]);
		}
		
		//for(vector<int>::iterator it = Two.begin(); it != Two.end(); it++)
		//	cout << *it;
		//cout << "\n";
		
		int x = 0, g = 0;	//二转八 
		for(vector<int>::iterator it = Two.end()-1; it != Two.begin()-1; it--)
		{
			Eight[g] = Eight[g] + (*it) * pow(2.0,(double)x);
			x++;
			if(x%3 == 0) {g++; x=0;} 
		}
		//cout << Eight[g] <<"\n";
		if(Eight[g] != 0) cout << Eight[g];	//注意最前面不足三个的01 
		for(int i = g-1; i >= 0; i--)
			cout << Eight[i];
		cout << "\n";
		memset(Eight,0,sizeof(Eight));
		Two.clear();
		Six.clear();
	}
	return 0;
}

顺便给个十六转十的,特别注意 16*位数(下标)

#include<iostream>
#include<string>
#include<math.h>
using namespace std;

string Six;

int main()		
{
	cin >> Six;
	unsigned long int T = 0;
	int len = Six.size();
	int j = len -1;
	for(int i = 0; i < len; i++)
	{//十六转十 
		if(Six[i] <= 'F' && Six[i] >= 'A')
			T = T + (Six[i] - 'A' + 10) * pow(16.0,(double)j);
		else
			T = T + (Six[i] - '0') * pow(16.0,(double)j);
		j--;
	}
	cout << T;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值