2~62位任意進(jìn)制轉(zhuǎn)換方法(c++)
進(jìn)制轉(zhuǎn)換的符號表為[0-9a-zA-Z],共61個字符,最大可表示62進(jìn)制。
思路是原進(jìn)制先轉(zhuǎn)換為10進(jìn)制,再轉(zhuǎn)換到目標(biāo)進(jìn)制。
疑問:
對于負(fù)數(shù),有小伙伴說可以直接將符號丟棄,按照整數(shù)進(jìn)行進(jìn)位轉(zhuǎn)換,最后再將負(fù)號補(bǔ)回來,我認(rèn)為這種做法是不對的。
正確的做法是:考慮好按照16位(short)還是32位(int)抑或64位(long long),先求出二進(jìn)制補(bǔ)碼(這時(shí)候就正負(fù)數(shù)就統(tǒng)一了),將二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制后在轉(zhuǎn)換為其他進(jìn)制(如果有小伙伴知道如何直接將二進(jìn)制轉(zhuǎn)換為任意進(jìn)制的方法可以留言告訴我,不勝感激。注意這里的任意進(jìn)制不是單純的8 16等2的冪次進(jìn)制,還有其他的比如7、9等)。
下面貼上這種我認(rèn)為針對負(fù)數(shù)的處理方法不太合適的代碼:
輸入格式:原進(jìn)制,目標(biāo)進(jìn)制,原進(jìn)制下的數(shù)字(用字符串表示)
輸出格式:目標(biāo)進(jìn)制下的數(shù)字
#include <iostream> #include <string> #include <cmath> using namespace std; //將任意字符轉(zhuǎn)換為十進(jìn)制,其中a-z代表10-35,A-Z代表36-61,用對應(yīng)的ASCII碼調(diào)整就好 long long convertToDec(char c) { long long decNum; if(c>='a' && c<='z') decNum=c-87; else if(c>='A' && c<='Z') decNum=c-29; else if(c>='0' && c<='9') decNum=c-48; return decNum; } //將十進(jìn)制轉(zhuǎn)換為這些字符 char convertToDec(long long c) { long long objchar; if(c>=10 && c<=35) objchar=c+87; else if(c>=36 && c<=61) objchar=c+29; else if(c>=0 && c<=9) objchar=c+48; return objchar; } int main() { int src; int obj; string num; while(cin>>src>>obj>>num) { bool IsNegative=false; if(num[0]=='-') { num.erase(0); IsNegative=true; } long long decNum=0;//十進(jìn)制數(shù)(中間數(shù)) for(long long i=0;i<num.size();++i) decNum+=convertToDec(num[i])*pow(src,num.size()-1-i); string strTmp; long long tmp; while(decNum>0) { tmp=decNum % obj; strTmp=convertToDec(tmp)+strTmp; decNum/=obj; } if(IsNegative) strTmp='-'+strTmp; cout<<strTmp<<endl; } return 0; }
以上這篇2~62位任意進(jìn)制轉(zhuǎn)換方法(c++)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持我們。
上一篇:VC List Control控件如何刪除選中的記錄實(shí)例詳解
欄 目:C語言
本文標(biāo)題:2~62位任意進(jìn)制轉(zhuǎn)換方法(c++)
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/1427.html
您可能感興趣的文章
- 01-10如何判斷一個整數(shù)的二進(jìn)制中有多少個1
- 01-10C++如何通過ostringstream實(shí)現(xiàn)任意類型轉(zhuǎn)string
- 01-10C++ 十進(jìn)制轉(zhuǎn)換為二進(jìn)制的實(shí)例代碼
- 01-10純C語言:遞歸二進(jìn)制轉(zhuǎn)十進(jìn)制源碼分享
- 01-10c語言二進(jìn)制數(shù)按位輸出示例
- 01-10C語言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 01-10c++實(shí)現(xiàn)十進(jìn)制轉(zhuǎn)換成16進(jìn)制示例
- 01-10C語言采用文本方式和二進(jìn)制方式打開文件的區(qū)別分析
- 01-10C++二進(jìn)制翻轉(zhuǎn)實(shí)例分析
- 01-10C++實(shí)現(xiàn)string存取二進(jìn)制數(shù)據(jù)的方法


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求