基礎演算法題 進製轉換(模擬思想)

2021-10-10 03:47:37 字數 2082 閱讀 8467

進製轉換

題目描述

我們可以用這樣的方式來表示乙個十進位制數: 將每個阿拉伯數字乘以乙個以該數字所處位置為指數,以 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.最後乙個 很好,學習演算法不是為了...