以下是迪西自己的寫法
PHP 語法:
#include<stdio.h>
#include<stdlib.h>
// 副程式:輸入1~15 dec 轉 hex, if 公式
int HEX_ABC_if (int DEC, bool Caps)
{
if (DEC < 10) // 數值 < 10 的
{ return 48+DEC; } // 使用 ACSII 碼轉換為"文字格式" 的數字
else // 數值 > 10 的轉換
{
if (Caps) // HEX 字母大小寫變換
{ return 55+DEC; } // 使用 ACSII 碼轉換成大寫字母
else
{ return 87+DEC; } // 使用 ACSII 碼轉換成小寫字母
}
return 0;
}
// 主程式
int main(int argc, char *argv[])
{
int Index; // 則位紀錄資料時,位置移位數。
char Display[21]=""; //提供儲存轉換的結果
int Base,Quotient,Residue,Number;
// Base=進位轉換的基數, Quotient=商數,
// Residue=餘數, Number=輸入的數值
int i; // 供 for loop 使用
char Temp; // 供 for loop 使用
while(1) // 重複執行輸入與轉換的 while loop
{
// 構成數字輸入的功能
printf("\n請輸入10進位數數字:");
scanf("%d", &Number);
// 係利用長除法以下的 while loop 實現,取得進位數轉換值。
// 但是數值左右顛倒的。
Quotient=Number; // scanf 從取得的數值給 Quotient
Base=16; //設定底數的除數。
Index=0; // Display 的 Index 規零
while (Quotient > 0) // 只要商數 > 0 就進入執行
{
Residue = Quotient; // 設定長除法的被除數
Quotient /= Base; // 取得目前的商數
Residue %= Base; // 取得目前的餘數
Display [Index++] = HEX_ABC_if (Residue,1);
// 將取得的餘數轉成 hex 編碼,並儲存到 Display 中。
}
Display[Index+1]='\0'; // 補上 C/C++ 語言的字串結尾。
// 以下的 for loop 是把 Display 中的左右顛倒結果,反轉修正回來。
for (i = 0; i < Index/2; i++)
{
Temp = Display[i];
Display[i] = Display[Index-1-i];
Display[Index-1-i] = Temp;
}
printf("\n輸入的10進位數:[%d]\n",Number);
printf("輸出的16進位數:[%s]\n",Display);
}
return 0;
}