进制的转换是个十分基础的问题,很多字符串变换的过程本质上都可以归结为进制的转换
首先是十进制转换为二进制
//十进制转换为二制的源码
#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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。