C語言實(shí)現(xiàn)任意進(jìn)制轉(zhuǎn)換器
本文實(shí)例為大家分享了C語言實(shí)現(xiàn)任意進(jìn)制轉(zhuǎn)換器的具體代碼,供大家參考,具體內(nèi)容如下
簡單的C語言任意進(jìn)制轉(zhuǎn)換器
該進(jìn)制轉(zhuǎn)換器可進(jìn)行任意進(jìn)制轉(zhuǎn)換,請看效果圖:

代碼
/**
******函數(shù)聲明
******進(jìn)制函數(shù),輸入與輸出
void main();
******返回將n進(jìn)制num轉(zhuǎn)換成的十進(jìn)制數(shù)
int NToD(char *num,int n);
******將十進(jìn)制數(shù)d轉(zhuǎn)換成m進(jìn)制數(shù)mnum
void DToM(int d,int m,char *mnum);
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/**
? 進(jìn)制轉(zhuǎn)換
*/
int NToD(char *num,int n); ? ? ? ? ? /**返回將n進(jìn)制num轉(zhuǎn)換成的十進(jìn)制數(shù)*/
void DToM(int d,int m,char *mnum); ?/**將十進(jìn)制數(shù)d轉(zhuǎn)換成m進(jìn)制數(shù)mnum*/
void main()
{
? ? int N,M; ? ? ? ? ? ? ? ? ? ? ? ? /**分別代表進(jìn)制數(shù)*/
? ? char Nnum[20],Mnum[20]; ? ? ? ? ?/**存放N進(jìn)制數(shù)及轉(zhuǎn)換后的M進(jìn)制數(shù)*/
? ? while(1)
? ? {
? ? ? ? printf("請輸入需要轉(zhuǎn)換的幾進(jìn)制:");
? ? ? ? scanf("%d",&N);
? ? ? ? printf("請輸入需要轉(zhuǎn)換的幾進(jìn)制數(shù):");
? ? ? ? scanf("%s",Nnum);
? ? ? ? printf("請輸入需要被轉(zhuǎn)換成為幾進(jìn)制");
? ? ? ? scanf("%d",&M);
? ? ? ? int d=NToD(Nnum,N); ? ? ? ? ? ? ?/**將N進(jìn)制數(shù)Mnum轉(zhuǎn)換為十進(jìn)制數(shù)d*/
? ? ? ? DToM(d,M,Mnum); ? ? ? ? ? ? ? ? ?/**將十進(jìn)制數(shù)d轉(zhuǎn)化為M進(jìn)制數(shù)Mnum*/
? ? ? ? printf("%d進(jìn)制數(shù)%s轉(zhuǎn)換為%d進(jìn)制數(shù)為:%s\n",N,Nnum,M,Mnum);
? ? ? ? printf("\n");
? ? }
}
int NToD(char *num,int n)
{
? ? int i,weight=1,d=0; ? ? ? ? ? ? ?/**weight存放各位的權(quán)值及num對應(yīng)的十進(jìn)制數(shù)*/
? ? int len=strlen(num); ? ? ? ? ? ? /**計(jì)算num的長度*/
? ? for(int i=len-1;i>=0;i--) ? ? ? ?/**N進(jìn)制數(shù)num轉(zhuǎn)化為十進(jìn)制數(shù)*/
? ? {
? ? ? ? if(num[i]>='a'&&num[i]<='z') /**將字母映射到對應(yīng)的十進(jìn)制數(shù)*/
? ? ? ? ? ?d+=(num[i]-'a'+10)*weight;
? ? ? ? ? ?else if(num[i]>='A'&&num[i]<='Z')
? ? ? ? ? ? d+=(num[i]-'A'+10)*weight;
? ? ? ? else
? ? ? ? ? ? d+=(num[i]-'0')*weight;
? ? ? ? weight*=n; ? ? ? ? ? ? ? ? ? ?/**向左移一位,權(quán)值變?yōu)樵瓉淼膎倍*/
? ? }
? ? return d;
}
void DToM(int d,int m,char *mnum)
{
? ? int len=0,r;
? ? do
? ? {
? ? ? ? r=d%m;
? ? ? ? if(r>=10)
? ? ? ? ? ? mnum[len++]=r-10+'A'; ? ? /**余數(shù)大于等于10時(shí)映射成字母*/
? ? ? ? else
? ? ? ? ? ? mnum[len++]=r+'0'; ? ? ? ?/**余數(shù)小于10時(shí)映射成數(shù)字*/
? ? ? ? d/=m;
? ? }while(d!=0);
? ? mnum[len]='\0';
? ? char t;
? ? for(int i=0,j=len-1;i<j;i++,j--)
? ? {
? ? ? ? t=mnum[i];
? ? ? ? mnum[i]=mnum[j];
? ? ? ? mnum[j]=t;
? ? }
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C語言16進(jìn)制與ASCII字符相互轉(zhuǎn)換
- C語言每日練習(xí)之進(jìn)制轉(zhuǎn)換
- C語言的進(jìn)制轉(zhuǎn)換及算法實(shí)現(xiàn)教程
- C語言實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換函數(shù)的實(shí)例詳解
- C語言用棧實(shí)現(xiàn)十進(jìn)制轉(zhuǎn)換為二進(jìn)制的方法示例
- C語言中網(wǎng)絡(luò)地址與二進(jìn)制數(shù)之間轉(zhuǎn)換的函數(shù)小結(jié)
- 編寫C語言程序進(jìn)行進(jìn)制轉(zhuǎn)換的問題實(shí)例
- C語言進(jìn)制轉(zhuǎn)換代碼分享
相關(guān)文章
c++類型轉(zhuǎn)換及RTTI運(yùn)行階段類型識別
這篇文章主要為大家介紹了c++類型轉(zhuǎn)換及RTTI運(yùn)行階段類型識別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2023-05-05
C語言之實(shí)現(xiàn)字符串小寫變大寫的實(shí)例
這篇文章主要介紹了C語言之實(shí)現(xiàn)字符串小寫變大寫的實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05
基于Matlab LBP實(shí)現(xiàn)植物葉片識別功能
局部二值模式(LBP)是由Ojala等人于2002年提出,它被用于特征提取,而且提取的特征是圖像的紋理特征。本文將利用Matlab和LBP實(shí)現(xiàn)植物葉片識別,需要的可以參考一下2022-02-02
C語言實(shí)現(xiàn)的排列組合問題的通用算法、解決方法
這篇文章主要介紹了C語言實(shí)現(xiàn)的排列組合問題的通用算法、解決方法,本文使用C語言實(shí)現(xiàn)在程序中解決這個(gè)問題,需要的朋友可以參考下2014-08-08
C語言隨機(jī)數(shù)生成教程(rand和srand用法)
這篇文章主要介紹了C語言隨機(jī)數(shù)生成教程(rand和srand用法),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
C語言?超詳細(xì)講解算法的時(shí)間復(fù)雜度和空間復(fù)雜度
算法復(fù)雜度分為時(shí)間復(fù)雜度和空間復(fù)雜度。其作用:?時(shí)間復(fù)雜度是度量算法執(zhí)行的時(shí)間長短;而空間復(fù)雜度是度量算法所需存儲空間的大小2022-03-03
C++ 實(shí)現(xiàn)多數(shù)的最大公約數(shù)的實(shí)例
這篇文章主要介紹了C++ 實(shí)現(xiàn)多數(shù)的最大公約數(shù)的實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-06-06

