【漢字十六進制轉換工具介紹 16進制解碼轉換】今天這道題目呢,與前天講的“龜兔賽跑”都是從PAT的基礎編程題目中節(jié)選過來的 。
難度不是很大,但是特別基礎,復習到了基礎知識,也就是二進制、十進制兩者之間的相互轉換 。
我們先來看看這道題目的要求:
BCD數(shù)是用一個字節(jié)來表達兩位十進制的數(shù),每四個比特表示一位 。
所以,如果一個BCD數(shù)的十六進制為0x12,那么它的十進制也是12 。
此時有一位小伙伴并不知道BCD數(shù)的運算規(guī)則,直接把0x12當作二進制來轉換成十進制,那就會得到18 。
現(xiàn)在呢,我們就期望能把這個錯誤得到的十進制,轉換成我們期望得到的十進制數(shù)值 。
給定的這個錯誤十進制范圍為[0,153] 。
題目要求呢我們都清楚了,接下來就是如何解決這個問題 。
這里呢,主要涉及到的是十六進制和十進制之間以及二進制和十進制之間的轉換 。
但我呢,好像把這道題目給想復雜了emm,結果導致簡單問題復雜化,實在是不應該啊 。
理清邏輯,畫出流程圖,這是十進制轉換為二進制再進行BCD解密程序要寫正確的話,流程圖用來幫助理清邏輯非常好用,這張流程圖畫的有些小,真的有些不好意思 。

可以從這張流程圖中看出來,我的邏輯就是:
把該同學輸入的整數(shù)先轉換為二進制數(shù),比方說給定的十進制數(shù)為18 。
那么轉換成的二進制數(shù)則為00010010 。
之后再把二進制數(shù)轉換為十六進制的形式則為0001和0010 。
之后分別轉換為十進制得到1和2 。
然后求和1*10+2*1=12,最終得到結果 。
我的代碼部分:注意,這里我用到了一個pow函數(shù),這是一個求冪次方的函數(shù),在用這個函數(shù)的時候,需要調用庫#include<math.h> 。
#include<stdio.h>#include<math.h>int main(){int number = 0;//初始化定義需要輸入的十進制數(shù)int store[8] = {0};int mod = 0;int mild1 = 0;//求和int mild2 = 0;//求和scanf("%d", &number);for(int i = 0; i < 8; i++){mod = number%2;number = number/2;store[i] = mod;}for(int i = 7; i >= 4; i--){if(store[i]==1){mild1 = mild1+pow(2,i-4);}}for(int i = 3; i >= 0; i--){if(store[i]==1){mild2 = mild2+pow(2,i);}}printf("%d", mild1*10+mild2);printf("n");}測試結果:
提交PAT測試結果:

但是呢,我在思考,這道題目有沒有更快的方法了 。
畢竟這樣從二進制開始寫,十進制轉化為二進制,然后再轉化為十六進制,然后分開二進制轉化為十進制的確麻煩了些 。
于是,我再來認真地讀了一遍這道題 。
讀來讀去,只發(fā)現(xiàn)這道題是只需要我們直接把十進制轉化為十六進制即可!然后再直接計算不就行了么 。
BCD太迷惑人了!
十進制轉化為十六進制的流程:
給定一個數(shù)18,18除以16等于1取余數(shù)得到2,再把1除以16等于0取余數(shù)得到1 。
1和2組合起來,不也能得到最終結果嗎?
流程圖,這是十進制轉換為十六進制再進行BCD解密

我的代碼部分
#include<stdio.h>int main(){int number = 0;//初始化定義需要輸入的十進制數(shù)int store[8];int mod = 0;scanf("%d", &number);for(int i = 0; i < 8; i++){mod = number%16;number = number/16;store[i] = mod;}printf("%d",store[1]*10+store[0]);}測試結果
推薦閱讀
- 免費分享這4種轉換方式 java字符串轉int方法
- 寍怎么讀 壢怎么讀?
- 不需要會員的pdf轉換器 pdf轉word免費工具怎么轉
- 甲骨文漢字對照表8000是什么
- pdf轉word轉換步驟 這四種方法都可以
- jpg格式圖片如何轉pdf 圖片怎么轉換成pdf格式?
- 放置三國吳國哪個武將可以轉換出陸遜
- 怎么轉換word為pdf格式 如何把Word文檔轉換成PDF
- 漢字的演變過程
- 皓字怎么解釋,皓字怎么解釋讀
