進(jìn)制轉(zhuǎn)換的符號(hào)表為[0-9a-zA-Z],共61個(gè)字符,最大可表示62進(jìn)制。
創(chuàng)新互聯(lián)是一家以重慶網(wǎng)站建設(shè)公司、網(wǎng)頁(yè)設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、成都網(wǎng)站營(yíng)銷(xiāo)、小程序App開(kāi)發(fā)等移動(dòng)開(kāi)發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為木包裝箱等眾行業(yè)中小客戶(hù)提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開(kāi)發(fā)服務(wù)。
思路是原進(jìn)制先轉(zhuǎn)換為10進(jìn)制,再轉(zhuǎn)換到目標(biāo)進(jìn)制。
疑問(wèn):
對(duì)于負(fù)數(shù),有小伙伴說(shuō)可以直接將符號(hào)丟棄,按照整數(shù)進(jìn)行進(jìn)位轉(zhuǎn)換,最后再將負(fù)號(hào)補(bǔ)回來(lái),我認(rèn)為這種做法是不對(duì)的。
正確的做法是:考慮好按照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)為針對(duì)負(fù)數(shù)的處理方法不太合適的代碼:
輸入格式:原進(jìn)制,目標(biāo)進(jìn)制,原進(jìn)制下的數(shù)字(用字符串表示)
輸出格式:目標(biāo)進(jìn)制下的數(shù)字
#include#include #include using namespace std; //將任意字符轉(zhuǎn)換為十進(jìn)制,其中a-z代表10-35,A-Z代表36-61,用對(duì)應(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 0) { tmp=decNum % obj; strTmp=convertToDec(tmp)+strTmp; decNum/=obj; } if(IsNegative) strTmp='-'+strTmp; cout<
以上這篇2~62位任意進(jìn)制轉(zhuǎn)換方法(c++)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持創(chuàng)新互聯(lián)。