您的位置:首页 > 编程语言

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

2014-12-25 21:45 573 查看
进制的转换是个十分基础的问题,很多字符串变换的过程本质上都可以归结为进制的转换

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

//十进制转换为二制的源码
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐