該實例要求使用C實現一個無符號整數到[2,16]進制數的轉換。這個還是比較好想的,就是對該無符號整數不斷的斤進制數d取余數,取商,一直做這樣的運算,直到商為0為止,將所有的余數按照從后往前的順序穿起來,就是轉換后的進制數。
下面上我的代碼:
~~~
#include <stdio.h>
/**用于聲明char數組的長度 **/
#define M (sizeof(unsigned int) * 8)
int trans(unsigned int m,int d,char s[]);
/**
* @brief main 將一個無符號整數轉換成任意d進制數(2 << d << 16)
* @return
*/
int main(void)
{
/**
* 思路:將一個無符號整數m轉換成任意d進制數,
* 則可以將m除以d,將余數從char數組的最后一位
* 向前保存,同時將商再除以d,以同樣的方式進行處理
* 最后得到的數組就是所對應的d進制數
*/
unsigned int m;
printf("Please enter the digits you want to transform:\n");
scanf("%d",&m);
char str[33];
int i = 0;
printf("The translate results are:\n");
for(i = 2;i <= 16;i++){
int nums = trans(m,i,str);
printf("%d = ",m);
int j = 0;
for(j = 0;j < nums;j++){
printf("%c",str[j]);
}
printf("(%d)\n",i);
}
return 0;
}
/**
* @brief trans 用于對無符號整數轉換
* @param m 要被轉換的數字
* @param d 要被轉換成的進制數
* @param s 存放被轉換后的進制數的數組
* @return 返回轉換后進制數的長度,也就是數組的長度
*/
int trans(unsigned int m,int d,char str[]){
if(d < 2 || d > 16){
//將s置為0
str[0] = '\0';
return 0;
}
/**用于保存進制數 **/
char digits[] = "0123456789ABCDEF";
int i = M;
int j = 0;
char buf[M+1];
/**用于保存商 **/
int s = m;
buf[i] = '\0';
//這里使用do...while
do{
buf[--i] = digits[s % d];
s = s / d;
}while(s);
//對數組s進行賦值
for(j = 0;(str[j]=buf[i])!= '\0';j++,i++);
return j;
}
~~~
下面是我的運行結果截圖:

- 前言
- 實例一:HelloWorld
- scanf函數學習
- 實數比較
- sizeof()保留字獲取類型的大小
- 自增/自減學習
- C學習if條件判斷和for循環
- C實現的九九乘法表
- C實現一個比較簡單的猜數游戲
- 使用C模擬ATM練習switch..case用法
- 記錄一個班級的成績練習一維數組
- C數組實現矩陣的轉置
- C二維數組練習
- 利用數組求前n個質數
- C實現萬年歷
- C實現數組中元素的排序
- C實現任意進制數的轉化
- C判斷一個正整數n的d進制數是否是回文數
- C使用遞歸實現前N個元素的和
- 鋼材切割問題
- 使用指針比較整型數據的大小
- 指向數組的指針
- 尋找指定元素
- 尋找相同元素的指針
- 整數轉換成羅馬數字
- 字符替換
- 從鍵盤讀入實數
- C實現字符行排版
- C實現字符排列
- C實例--判斷一個字符串是否是回文數
- 通訊錄的輸入輸出
- 撲克牌的結構定義
- 使用“結構”統計學生成績
- 報數游戲
- 模擬社會關系
- 統計文件中字符個數
- C實現兩個文件的內容輸出到同一個屏幕