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