使用c++实现各种进制之间的转换
生活随笔
收集整理的這篇文章主要介紹了
使用c++实现各种进制之间的转换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
我們最常見的進制轉換就是十進制轉換為二進制了,就是不停的作除法,取余數。
例如:十進制的10轉換為二進制
10÷2=5···0
5÷2=2···1
2÷2=1···0
1÷2=0···1
直到商為0,然后把余數倒著寫,所以10的二進制表示為1010。
十進制->N進制
會了十進制轉換為二進制,那么十進制轉換為任意進制也就迎刃而解了,只要不停的除法和取余就好了。
#include <iostream> #include <cstdio> #include <stack> /** 進制轉換 10——>n(n<10)* */ using namespace std;void ConvertT2N(int number,int n){stack<char> s;if (number == 0) { //特殊情況,當輸入是0時,輸出也是0,否則輸入0時就卡那了s.push(0);} else {while (number) {s.push(number % n);number /= n;}}// 把棧中的余數輸出while (!s.empty()) {printf("%d", s.top());s.pop();}printf("\n"); } int main(){int number;while (scanf("%d", &number) != EOF) {ConvertT2N(number, 2);}return 0; }但是上面的代碼是有一點小問題的,它只能轉換10以內的進制,也就是N必須小于10,否則就會出錯。例如十進制轉換成十六進制就會出錯。例如11轉換成十六進制表示為b而不是11,因為當表示十進制以上的數時需要用到字母a,b,c,d等等。
所以需要在輸出的余數上面加加工一下,把大于10的數用字母表示。
改進版代碼如下:
#include <iostream> #include <cstdio> #include <stack>using namespace std;// 把整數轉換成對應進制的字符,例如10的十六進制中表示為A char Int2Char(int target){if (target < 10) {return target + '0';} else {return target - 10 + 'A';} } /** 現在N可以取任意進制了* */ void ConvertT2N(int number,int n){stack<char> s; //因為要存字母所以用charif (number == 0) { //特殊情況,當輸入是0時,輸出也是0,否則輸入0時就卡那了s.push(0);} else {while (number) {s.push(Int2Char(number % n)); //在余數入棧時加工一下,把int轉換成charnumber /= n;}}// 把棧中的余數輸出while (!s.empty()) {printf("%c", s.top());s.pop();}printf("\n"); } int main(){int number;while (scanf("%d", &number) != EOF) {ConvertT2N(number, 16);//把十進制轉換為十六進制}return 0; }N進制轉換成十進制
會了十進制轉換為N進制,那么把N進制轉換為十進制倒著來就好了,不停的乘N,加上余數。
例如:二進制的1010轉換為十進制
0*2+1=1
1*2+0=2
2*2+1=5
5*2+0=10
#include<iostream> #include<cstdio>using namespace std; /** 進制轉換 N->10* */ // 先把字母轉換成數字 int Char2Int(char target) {if (target >= '0' && target <= '9') {return target - '0';} else {return target - 'A' + 10;} } void ConverM2T(string str,int m){int number = 0; //該數在10進制下的表示for (int i = 0; i < str.size(); ++i) {number *= m;number += Char2Int(str[i]);}printf("%d\n", number); }int main(){string str;while (cin >> str) {ConverM2T(str,16); //把十六進制轉換為十進制}return 0; }M進制轉換為N進制
上述前兩個都會了以后,實現把M進制轉換成N進制了,思路是先把M進制轉換成十進制,然后再把十進制的數轉換成N進制。
#include <iostream> #include <cstdio> #include <stack> #include <string> using namespace std; /** M進制轉換成N進制* */ int Char2Int(char target) {if (target >= '0' && target <= '9') {return target - '0';} else {return target - 'A' + 10;} } // M進制轉換成十進制的數返回 int ConverM2T(string str,int m){int number = 0; //該數在10進制下的表示for (int i = 0; i < str.size(); ++i) {number *= m;number += Char2Int(str[i]);}return number; }char Int2Char(int target){if (target < 10) {return target + '0';} else {return target - 10 + 'a';} } //十進制轉換成N進制 void ConvertT2N(int number,int n){stack<char> s;while (number) {s.push(Int2Char(number % n));number /= n;}if (s.empty()) { //當輸入是0時,輸出也是0printf("0");}while (!s.empty()) {printf("%c", s.top());s.pop();}printf("\n"); }int main(){int m,n;while (scanf("%d%d",&m,&n)!=EOF){string str;cin >> str;int number = ConverM2T(str, m);// M進制轉換成十進制的數返回// 再把該數轉換成N進制ConvertT2N(number, n);}return 0; }總結
以上是生活随笔為你收集整理的使用c++实现各种进制之间的转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Forth 系统实现
- 下一篇: 阿里云的ECS服务器1M宽带等于多少入网