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)制。
疑問:
對于負(fù)數(shù),有小伙伴說可以直接將符號(hào)丟棄,按照整數(shù)進(jìn)行進(jìn)位轉(zhuǎn)換,最后再將負(fù)號(hào)補(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)容了,希望能給大家一個(gè)參考,也希望大家多多支持我們。
上一篇:VC List Control控件如何刪除選中的記錄實(shí)例詳解
欄 目:C語言
下一篇:C語言中判斷一個(gè)char*是不是utf8編碼
本文標(biāo)題:2~62位任意進(jìn)制轉(zhuǎn)換方法(c++)
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/1427.html
您可能感興趣的文章
- 01-10如何判斷一個(gè)整數(shù)的二進(jìn)制中有多少個(gè)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ù)求
 
隨機(jī)閱讀
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
 - 04-02jquery與jsp,用jquery
 - 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
 - 01-10C#中split用法實(shí)例總結(jié)
 - 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
 - 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
 - 01-10delphi制作wav文件的方法
 - 01-11ajax實(shí)現(xiàn)頁面的局部加載
 - 08-05DEDE織夢data目錄下的sessions文件夾有什
 - 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
 


