進製轉換
題目描述
我們可以用這樣的方式來表示乙個十進位制數: 將每個阿拉伯數字乘以乙個以該數字所處位置為指數,以 10 為底數的冪之和的形式。例如 123 可表示為 1×102+2×101+3×100 這樣的形式。
與之相似的,對二進位制數來說,也可表示成每個二進位制數碼乘以乙個以該數字所處位置為指數,以 2 為底數的冪之和的形式。
一般說來,任何乙個正整數 r 或乙個負整數 -r 都可以被選來作為乙個數制系統的基數。如果是以 r 或 -r 為基數,則需要用到的數碼為 0,1,…r-1。
例如當 r=7 時,所需用到的數碼是 0,1,2,3,4,5,6,這與其是 rr 或 -r 無關。如果作為基數的數絕對值超過 10,則為了表示這些數碼,通常使用英文本母來表示那些大於 9 的數碼。例如對 16 進製數來說,用 a 表示 10,用 b 表示 11,用 c 表示 12,以此類推。
在負進製數中是用 -r −r 作為基數,例如 −15(十進位制)相當於 110001 (-2進製),並且它可以被表示為 2 的冪級數的和數:
110001=1×(−2)5+1×(−2)4+0×(−2) 3+0×(−2) 2+0×(−2) 1+1×(−2) 0
設計乙個程式,讀入乙個十進位制數和乙個負進製數的基數, 並將此十進位制數轉換為此負進製下的數。
輸入格式
輸入的每行有兩個輸入資料。
第乙個是十進位制數 n。 第二個是負進製數的基數 -r。
輸出格式
輸出此負進製數及其基數,若此基數超過 10,則參照 16 進製的方式處理。
輸入輸出樣例
輸入 #1
30000 -2
輸出 #1
30000=11011010101110000(base-2)
輸入 #2
-20000 -2
輸出 #2
-20000=1111011000100000(base-2)
輸入 #3
28800 -16
輸出 #3
28800=19180(base-16)
輸入 #4
-25000 -16
輸出 #4
-25000=7fb8(base-16)
說明/提示
【資料範圍】
對於 100% 的資料,−20≤r≤−2,∣n∣≤37336。
回顧下十進位制(大於等於0的實數)轉換為正進製
求 (173)10 轉換為二進位制
原理:被除數(n) = 商(n/jz) * 除數(jz) + 餘數
①、n 不斷 除以 jz 並取餘數。
②、最終逆序排序餘數即為答案
(最先得到的餘數為最低位)
實現**
#include
using
namespace std;
char s[25]
="0123456789abcdefghijlmn"
;voidf(
int n,
int jz)
intmain()
f(n, jz)
;printf
("(base%d)"
, jz)
;return0;
}
實現十進位制(所有實數)轉換為負進製
關鍵:當餘數為負數的時,要向 n借位。
#include
using
namespace std;
char s[25]
="0123456789abcdefghijlmn"
;voidf(
int n,
int jz)
f(n/jz, jz)
;printf
("%c"
, s[m]);
return;}
intmain()
f(n, jz)
;printf
("(base%d)"
, jz)
;return0;
}
2798 基礎題 進製轉換
可以直接做 也可以從二轉到10,10轉到16 看似容易 實則很需要細心,如何擺弄下標位置,如何計算邊界,如何儲存結果 include include include using namespace std define cdebbug 全域性資料 intmain if temp 9 temp 0 r...
東華OJ 基礎題69 進製轉換
問題描述 輸入乙個十進位制數,將其化成n進製數輸出 2 n 16 輸出結果時,大於等於10的數字用字母代替,a代表10,b代表11以此類推。輸入說明 你的程式需要從標準輸入裝置 通常為鍵盤 中讀入多組測試資料。每組輸入資料由一行組成,每行有2個數,分別代表十進位制數m 0 m 2 31 和進製n 2...
進製轉換水題
題目簡單的說一下吧 就是在int的範圍內 將十進位制的數轉換為16進製制 1.用乙個陣列來儲存,可以用於確定的值並且數量有限個,例如 12月份的天數,字母替換等 2.可以先轉換再直接輸出,也可以在處理輸出時再轉換 3.簡單的方法一定要熟練,一提到就可以寫出 來 4.最後乙個 很好,學習演算法不是為了...