大數進製轉換
最間在寫一道大數題的時候被卡了一下,所以準備整理一下大數的運算,先整理大數的進製轉換.
進製轉換的重點是被轉換數不斷被餘被除,一般範圍的整數轉換可以直接用 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...