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ǔ)碼(這時候就正負(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)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C++?opencv學(xué)習(xí)之圖像像素的邏輯操作
圖像的像素操作包括讀寫操作、算數(shù)操作、邏輯運(yùn)算操作等,下面這篇文章主要給大家介紹了關(guān)于C++?opencv學(xué)習(xí)之圖像像素的邏輯操作的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11
VSCode下.json文件的編寫之(1) linux/g++ (2).json中參數(shù)與預(yù)定義變量的意義解釋
這篇文章主要介紹了VSCode下.json文件的編寫之(1) linux/g++ (2).json中參數(shù)與預(yù)定義變量的意義解釋,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03
C++ Boost Random隨機(jī)函數(shù)詳解
Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱2022-11-11

