2~62位任意進(jìn)制轉(zhuǎn)換方法(c++)
進(jìn)制轉(zhuǎn)換的符號(hào)表為[0-9a-zA-Z],共61個(gè)字符,最大可表示62進(jìn)制。
思路是原進(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 <iostream>
#include <string>
#include <cmath>
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<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++)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
深入linux下遍歷目錄樹(shù)的方法總結(jié)分析
本篇文章是對(duì)linux下遍歷目錄樹(shù)的方法進(jìn)行了詳細(xì)的總結(jié)與分析,需要的朋友參考下2013-05-05
C++?opencv學(xué)習(xí)之圖像像素的邏輯操作
圖像的像素操作包括讀寫(xiě)操作、算數(shù)操作、邏輯運(yùn)算操作等,下面這篇文章主要給大家介紹了關(guān)于C++?opencv學(xué)習(xí)之圖像像素的邏輯操作的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11
VSCode下.json文件的編寫(xiě)之(1) linux/g++ (2).json中參數(shù)與預(yù)定義變量的意義解釋
這篇文章主要介紹了VSCode下.json文件的編寫(xiě)之(1) linux/g++ (2).json中參數(shù)與預(yù)定義變量的意義解釋,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
C++ Boost Random隨機(jī)函數(shù)詳解
Boost是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱(chēng)。Boost庫(kù)是一個(gè)可移植、提供源代碼的C++庫(kù),作為標(biāo)準(zhǔn)庫(kù)的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開(kāi)發(fā)引擎之一,是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱(chēng)2022-11-11
C語(yǔ)言實(shí)現(xiàn)掃雷OvO(完整代碼)
相信大家都玩過(guò)掃雷游戲,因?yàn)樗?jīng)典了,今天我們用C語(yǔ)言來(lái)模擬實(shí)現(xiàn)掃雷游戲,結(jié)合示例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2022-04-04
深入探究C/C++中互斥量(鎖)的實(shí)現(xiàn)原理
? 互斥量是一種同步原語(yǔ),用于保護(hù)多個(gè)線程同時(shí)訪問(wèn)共享數(shù)據(jù),互斥量提供獨(dú)占的、非遞歸的所有權(quán)語(yǔ)義,本文將和大家一起深入探究C/C++中互斥量(鎖)的實(shí)現(xiàn)原理,感興趣的小伙伴跟著小編一起來(lái)看看吧
Qt中QStackedWidget控件的實(shí)現(xiàn)
QStackedWidget是Qt框架中一個(gè)非常有用的控件,它允許你堆疊多個(gè)窗口部件,本文主要介紹了Qt中QStackedWidget控件的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2025-04-04

