个人博客:https://luxialan.com

十进制与任意进制的转换 分类: 编程 2014-12-25 21:45 91人阅读 评论(0) 收藏

进制的转换是个十分基础的问题,很多字符串变换的过程本质上都可以归结为进制的转换

首先是十进制转换为二进制

//十进制转换为二制的源码  
#include <iostream>  
#include<stdlib.h>
#include<vector>
using namespace std;  

void ten2two(int n)
{
	vector<int> vec;
	while(n)
	{
		vec.push_back(n%2);
		n=n/2;	
	}
	vector<int>::iterator iter;
	for(iter=vec.end()-1;iter!=vec.begin();iter--)
	{
		cout<<*iter;
	}
	cout<<*iter;
	cout<<endl;
}



int main()
{
	int num;
	cin>>num;
	ten2two(num);
	system("pause");
	return 1;
}


我们知道二进制是计算机最基本的操作,因此是十分特别的,我们可以直接通过位操作来得到十进制的二进制形式,其中涉及位的基本操作

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

int ten2two(int n)
{
	int i,k;
	vector<int> vec;
	for(i=0;i<sizeof(int)*8;i++)
	{
		if(n & (1<<i)) k=i;
	}
	for(i=0;i<=k;i++)
	{
		if(n & (1<<i))
			vec.push_back(1);
		else
			vec.push_back(0);
	}
	vector<int>::iterator iter;
	for(iter=vec.end()-1;iter!=vec.begin();iter--)
	{
		cout<<*iter;
	}
	cout<<*iter;
	return 1;
	


}


int main()
{
	int num;
	char i;
	string s;
	cin>>num;
    ten2two(num);
	system("pause");
	return 1;
}



接下来是十进制转换任意大于进制(大于十),此时如果余数大于等于10,我们需要用英文字母来表示

//十进制转换为任意进制的源码  
#include <iostream>  
#include<stdlib.h>
#include<vector>
using namespace std;  

#define NUM 16
void ten2n(int n)
{
	vector<int> vec;
	while(n)
	{
		vec.push_back(n%NUM);
		n=n/NUM;	
	}
	vector<int>::iterator iter;
	for(iter=vec.end()-1;iter!=vec.begin();iter--)
	{
		if(*iter>=10)
			cout<<(char)(*iter + 55);
		else
			cout<<*iter;
	}
	if(*iter>=10)
		cout<<(char)(*iter + 55);
	else
	cout<<*iter;
	cout<<endl;
}



int main()
{
	int num;
	cin>>num;
	ten2n(num);
	system("pause");
	return 1;
}


接下来我们来看leetcode上的一道题

Excel Sheet Column Title

 

Given a positive integer, return its corresponding column title as appear in an Excel sheet.

For example:

    1 -> A
    2 -> B
    3 -> C
    ...
    26 -> Z
    27 -> AA
    28 -> AB 

这道题目可以看做是十进制转换为二十六进制+string操作的练习

//十进制转换为任意进制的源码  
#include <iostream>  
#include<stdlib.h>
#include<string>
using namespace std;  

string convertToTitle(int n) 
{ 
	string s;
	char c;
	if(n<1)
		return "";
	else
	{
		while(n)
		{
			n--;
			c=n%26+'A';
			s +=c;
			n=n/26;
		}
		reverse(s.begin(),s.end());
		return s;
	}


}



int main()
{
	int num;
	char i;
	string s;
	cin>>num;
	s=convertToTitle(num);
	for(i=0;i<s.length();i++)
	{
		cout<<s[i];
	}
	system("pause");
	return 1;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2014-12-25 21:45  luxialan  阅读(165)  评论(0编辑  收藏  举报