日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

使用c++实现各种进制之间的转换

發(fā)布時間:2023/12/18 c/c++ 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用c++实现各种进制之间的转换 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

我們最常見的進制轉(zhuǎn)換就是十進制轉(zhuǎn)換為二進制了,就是不停的作除法,取余數(shù)。

例如:十進制的10轉(zhuǎn)換為二進制

10÷2=5···0

5÷2=2···1

2÷2=1···0

1÷2=0···1

直到商為0,然后把余數(shù)倒著寫,所以10的二進制表示為1010。

十進制->N進制

會了十進制轉(zhuǎn)換為二進制,那么十進制轉(zhuǎn)換為任意進制也就迎刃而解了,只要不停的除法和取余就好了。

#include <iostream> #include <cstdio> #include <stack> /** 進制轉(zhuǎn)換 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;}}// 把棧中的余數(shù)輸出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; }

但是上面的代碼是有一點小問題的,它只能轉(zhuǎn)換10以內(nèi)的進制,也就是N必須小于10,否則就會出錯。例如十進制轉(zhuǎn)換成十六進制就會出錯。例如11轉(zhuǎn)換成十六進制表示為b而不是11,因為當表示十進制以上的數(shù)時需要用到字母a,b,c,d等等。

所以需要在輸出的余數(shù)上面加加工一下,把大于10的數(shù)用字母表示。

改進版代碼如下:

#include <iostream> #include <cstdio> #include <stack>using namespace std;// 把整數(shù)轉(zhuǎn)換成對應進制的字符,例如10的十六進制中表示為A char Int2Char(int target){if (target < 10) {return target + '0';} else {return target - 10 + 'A';} } /** 現(xiàn)在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)); //在余數(shù)入棧時加工一下,把int轉(zhuǎn)換成charnumber /= n;}}// 把棧中的余數(shù)輸出while (!s.empty()) {printf("%c", s.top());s.pop();}printf("\n"); } int main(){int number;while (scanf("%d", &number) != EOF) {ConvertT2N(number, 16);//把十進制轉(zhuǎn)換為十六進制}return 0; }

N進制轉(zhuǎn)換成十進制

會了十進制轉(zhuǎn)換為N進制,那么把N進制轉(zhuǎn)換為十進制倒著來就好了,不停的乘N,加上余數(shù)。

例如:二進制的1010轉(zhuǎn)換為十進制

0*2+1=1

1*2+0=2

2*2+1=5

5*2+0=10

#include<iostream> #include<cstdio>using namespace std; /** 進制轉(zhuǎn)換 N->10* */ // 先把字母轉(zhuǎn)換成數(shù)字 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; //該數(shù)在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); //把十六進制轉(zhuǎn)換為十進制}return 0; }

M進制轉(zhuǎn)換為N進制

上述前兩個都會了以后,實現(xiàn)把M進制轉(zhuǎn)換成N進制了,思路是先把M進制轉(zhuǎn)換成十進制,然后再把十進制的數(shù)轉(zhuǎn)換成N進制。

#include <iostream> #include <cstdio> #include <stack> #include <string> using namespace std; /** M進制轉(zhuǎn)換成N進制* */ int Char2Int(char target) {if (target >= '0' && target <= '9') {return target - '0';} else {return target - 'A' + 10;} } // M進制轉(zhuǎn)換成十進制的數(shù)返回 int ConverM2T(string str,int m){int number = 0; //該數(shù)在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';} } //十進制轉(zhuǎn)換成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進制轉(zhuǎn)換成十進制的數(shù)返回// 再把該數(shù)轉(zhuǎn)換成N進制ConvertT2N(number, n);}return 0; }

總結(jié)

以上是生活随笔為你收集整理的使用c++实现各种进制之间的转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。