簡要整理大數進製轉換

2021-09-30 20:47:38 字數 1739 閱讀 2165

大數進製轉換

最間在寫一道大數題的時候被卡了一下,所以準備整理一下大數的運算,先整理大數的進製轉換.

進製轉換的重點是被轉換數不斷被餘被除,一般範圍的整數轉換可以直接用 a%b,a/b 來解決.

int 範圍的十進位制轉二進位制

#include

using namespace std;

intmain()

;//儲存二進位制

while

(cin>>a)

for(i--

;i>=

0;i--

)//逆序輸出

cout<}return0;

}

但在大數情況下就要人工模擬餘和除的過程.

由於轉換過程中需要用到大數除和餘.

為了方便理解,先了解一下數學原理.

除法原理是以迭代演算法對兩個變數進行移位、加減得到商和餘數.

舉個500/2的例子

模擬除法:

250

----

2)500

4 //無法整除則餘數給下一位

---10 //第二位運算時的數為上一位的餘數*當前進製+該位上的數

10---

0從左向右(由高位到低位)的運算.

10的二進位制轉換的過程

2|_10___   0   

2|_5___ 1

2|_2__ 0

2|_1_ 1

得到1010

不斷得獲得餘數

先餘的是低位,後余的是高位

大數的輸入一定是字串,為了運算方便先將字串轉換成數字.

int  c[

10000];

//儲存數字

void

tonum()

}

模擬人工除和餘,

不斷獲得餘數.

(該**為十進位制轉二進位制)

(可以增加兩個引數作為新舊進製,然後替換文中的10和2,就可以任意轉換10以下的進製).

#include

#include

using namespace std;

char a[

10000];

//存放輸入的字串

char b[

10000];

//存放輸出的字串,十進位制以下都可以用int,但以防萬一本處使用字串

int c[

10000];

//儲存數字形式的大數

void

tonum()

//將字串轉換成數字

}int

main()

//最後的y就是c%2的值

//c是一輪除后的新值

b[v++]=

'0'+y;

//放置餘數

}//由於是用k來判斷是否除盡,所以k=0時,y=0,所以最後的b[v-1]一定是0,可以捨去.

for(

int i=v-

2;i>=

0;i--

)//逆序輸出轉換後的進製數

cout<}return0;

}

大數進製轉換

對於數值不是很大可以直接表示的數,以求10進製數11的2進製表示為例,我們可以使用如下的方法直接進行進製轉換 但是對於較大的數如1000位的數 數字有1000個,不是1000位元組 我們無法直接表示,因此不能直接得出,但是我們可以將上述過程分解。觀察上述運算,其實是經過了4次除法 11 2,5 2,...

大數進製轉換

進製轉換的一些筆記,由淺入深,通過複習得到的一些感悟,寫寫 先寫個最簡單的,十進位制轉二進位制 北郵機試 大家都知道,資料在計算機裡中儲存是以二進位制的形式儲存的。有一天,小明學了c語言之後,他想知道乙個型別為unsigned int 型別的數字,儲存在計算機中的二進位制串是什麼樣子的。你能幫幫小明...

進製轉換 大數除法

我們可以用21的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個21的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?斐波那契數列 輸入乙個整數 int 輸出該數二進位制表示中1的個數。其中負數用補碼表示。負數的補碼,前導是一連串的1,int為32位 class solution n 2 el...