當前位置:首頁 » 編程語言 » m進制轉換為n進制c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

m進制轉換為n進制c語言

發布時間: 2022-09-13 06:51:29

1. c語言中各種進制的轉換規矩 詳細些 最好是計算過程寫出來

代碼如下:(可以輸出20位數)#include<stdio.h>
void transfer(int m,int change)
{
int aa[20],j,saveM=m;
for(j=0;m!=0;j++)
{
aa[j]=m%change;
m=m/change;
}
printf("十進制數%d的%d進制形式是:\n",saveM,change);
for(;j!=0;j--)
printf("%d ",aa[j-1]); //注意這空是填aa[j-1],而不是aa[j],因為上面那個循環進行到最後一步時,j++還是會運行一次,但是此時並沒有給aa[j]賦值,因為循環結束
}
main()
{
int n,c;
printf("請輸入一個整數\n");
scanf("%d",&n);
printf("該整數是十進制數,你想將它轉化成幾進制數呢?\n");
getchar();
scanf("%d",&c);
transfer(n,c);
} 功能說明:該函數可以將任意的十進制數轉化成任意的N進制數。轉化後的結果,每兩位數之間用一個空格隔開。
希望可以幫到您,謝謝!

2. 用C編寫代碼 M進制轉換成N進制

說的太廣泛了,要求不明確,如果不是你想要的,還白做。
是否支持負數?
什麼形式輸入,什麼形式的輸出?以字元串表示?
如果你有所謂的20進制,16,17,18,19怎麼表示?g,h,i?
下面這個程序支持2進制到16進制之間正整數的轉換
#include
<stdio.h>
#include
<stdlib.h>
#include
<string.h>
int
N2Str(int
value,int
N,char
*str)
{
char
temp[10],*Bits="0123456789abcdef";
int
Len;
if(value<0||N<2||N>16||str==NULL)
return
0;
if(value>=N)
{
if(!N2Str(value/N,N,str))
return
0;
}
Len=strlen(str);
str[Len]=Bits[value%N];
str[Len+1]='\0';
return
1;
}
int
M2N(int
M,char
*MStr,int
N,char
*NStr)
{
int
value=0,bit;
if(M<2||M>16||MStr==NULL||N<2||N>16||NStr==NULL)
return
0;
while(*MStr)
{
value*=M;
if(*MStr>='0'&&*MStr<='9')
bit=*MStr-'0';
else
if(*MStr>='a'&&*MStr<='f')
bit=*MStr-'a'+10;
else
if(*MStr>='A'&&*MStr<='F')
bit=*MStr-'A'+10;
if(bit>=M)
return
0;
value+=bit;
MStr++;
}
*NStr='\0';
N2Str(value,N,NStr);
return
1;
}
int
main(void)
{
char
*in="123456";
char
out[50];
if(M2N(10,in,2,out))
printf("%s->%s\n",in,out);
else
printf("illegal
input
data\n");
system("pause");
return
0;
}

3. 求C語言8進制10進制13進制演算法的詳細解說

這個演算法要自己寫的,代碼如下,任意進制的轉換(m進制轉化為n進制)

void m2n(int m, char* mNum, int n, char* nNum)

{

int i = 0;

char c, *p = nNum;

//這是一個考察地方,是否能用最少乘法次數。

while (*mNum != '\0')

i = i*m + *mNum++ - '0';

//輾轉取余

while (i) {

*p++ = i % n + '0';

i /= n;

}

*p-- = '\0';

//逆置余數序列

while (p > nNum) {

c = *p;

*p-- = *nNum;

*nNum++ = c;

}

}

4. c語言高手快來幫幫忙```急「進制轉換」

//十進制轉任何進制數。

#include "stdio.h"
#include "math.h"

#define MAXLEN 100

unsigned int check(char *s,unsigned int m);

void strtonum(char* str,unsigned int *p,unsigned int m);

unsigned long mto10(int *p,unsigned int mlen,unsigned int m);

void tenton(unsigned long l10,int *p,int n,unsigned int nlen);

void main()

{

unsigned int m,n,mlen,nlen;

char snumber[MAXLEN];

unsigned int* p;

unsigned long l10;/*l10為m進制轉為n進制時作為中轉的十進制數*/

int i;

printf("萬能進制轉換程序。請輸入欲轉換的數:\n");

gets(snumber);/*將輸入的m進制數作為一個字元串接收*/

printf("m進制轉為n進制,請輸入m和n:\n");

printf("m=");scanf("%u",&m);

printf("n=");scanf("%u",&n);

if(m<2||n<2){printf("非法輸入!");exit(0);}

mlen=check(snumber,m);

p=malloc(sizeof(int)*mlen);

strtonum(snumber,p,m);

l10=mto10(p,mlen,m);

free(p);

nlen=log(l10)/log(n);/*求出將十進制數l10轉為n進制數時該n進制數的位數*/

p=malloc(sizeof(int)*nlen);

tenton(l10,p,n,nlen);

printf("轉為:");

for(i=0;i<=nlen;i++)

{

if(n>36)printf("%u ",p[i]);

else

{

if(p[i]>=10)printf("%c",p[i]+A-10);

else printf("%d",p[i]);

}

}

printf("\n");

free(p);

}

unsigned int check(char *s,unsigned int m)

/*將輸入的m進制數字元串全部轉為大寫並返回有效的m進制數的位數*/

{

unsigned int i=0,num=0;

strupr(s);

while(s[i]!=\0)

if(s[i++]== )num++;

if(m>36)return num+1;

else return strlen(s)-num;

}

void strtonum(char* str,unsigned int *p,unsigned int m)

/*將輸入的m進制數字元串一位一位轉為數字並放入數組p中*/

{

int i=0,j=0;

char *q;

if(m>36)

{

q=strtok(str," ");p[i++]=atoi(q);

while(q){q=strtok(NULL," ");p[i++]=atoi(q);}

}

else

{

while(str[i]!=\0)

{

if(isalpha(str[i]))p[j++]=str[i]-A+10;

else if(isdigit(str[i]))p[j++]=str[i]-0;

i++;

}

}

}

unsigned long mto10(int *p,unsigned int mlen,unsigned int m)

/*將數組p中按位存放的m進制數轉為十進制數並返回*/

{

unsigned long l=0,h;

int i,j;

for(i=mlen-1;i>=0;i--)

{

h=1;

for(j=1;j<=i;j++)h*=m;

l+=p[mlen-1-i]*h;

}

return l;

}

void tenton(unsigned long l10,int *p,int n,unsigned int nlen)

/*十進制轉為n進制*/

{

unsigned long a=l10;

while(a)

{

p[nlen--]=a%n;

a/=n;

}

}

5. c語言m進制轉換為n進制

首先按你的先把數值之間的進制搞明白,然後以二進制位單位進行數值轉換,相對應的數位如下:1個16進制 = 4個2進制,1個8進制 = 3個2進制,十進制和二進制逐一對換。

6. C++編程用遞歸法將一個m進制的整數轉換成n進制的整數,其中m,n為小於10的整數

程序實現把m進制的x轉為n進制,遞歸實現

例如,7進制的542轉為5進制為2100

#include<iostream>

typedef long long LL;


LL f(int n, int i, LL p) {

if (i == 0) return p;

else return f(n, i - 1, p * n);

}


LL m2ten(LL x, int m, int i, LL s) {

if (x == 0) return s;

else return m2ten(x / 10, m, i + 1, s + x % 10 * f(m, i, 1));

}


void ten2n(LL t, int n) {

if (t > n - 1)

ten2n(t / n, n);

std::cout << t % n;

}


void m2n(LL x, int m, int n) {

ten2n(m2ten(x, m, 0, 0), n);

}


int main() {

LL x;

int m, n;

std::cin >> x >> m >> n;

m2n(x, m, n);

std::cout<<std::endl;

return 0;

}

7. C語言數制轉換

十進制轉化成二進制是用2來展轉相處,直到結果為1,然後把從最後的1開始,從下到上,把余數寫出就是對應的二進制,如27/2=13...1
13/2=6...1
6/2=3....0
3/2=1....1寫出來就是11011

8. 將m進制轉化為n進制

將m進制轉化為n進制,如果它們不存在整數次冪的關系,就必須先把m進制數先轉換為十進制數,然後再把十進制數轉換為n進制數。

9. 怎麼編寫一個c++程序可以將任意m進制轉換為n進制數

#include <stdio.h>
#include <string.h>
#include "stdlib.h"
#include <conio.h>
#define size 100
//定義一個棧
typedef struct
{
int x[size];
int top ;
}stack;
//棧初始化
void init(stack &p){
p.top=0;
}
//入棧
int push(stack &p,int &e){
if (p.top<size)
{
p.x[p.top++]=e;
return 1;
}
return 0;
}
//出棧
int pop(stack &p,int &e){
if (p.top>0)
{
e=p.x[--p.top];
return 1;
}
return 0;
}
//將 n進制數據轉化為十進製表示
void td(char s[],int n,int &num){
char *p;
int e;
p=s;
num=0;
while(*p){
if(*p>='A') //16 進制轉化
e=*p-'A'+10;
else
e=*p-'0';
p++;
num=num*n+e;
}
}
//將十進制轉化為 m 進制
void tp(int num,int m,char s[]){ //
int n=0,e;
char *p;
stack b; init(b);
p=s;
while(num){ //將十進制數據逐位分離 壓入棧中 此時 數據為倒序
n=num%m;
if(n>9)
e=n-10+'A';
else
e=n+'0';
push(b,e);
num/=m;
}
while(pop(b,e)){ //從棧中取出元素,存入數組 s 中 此時 數據為順序
*p=e;
p++;
}
*p='\0'; //在數組 尾部加結束標志
}

int check(char s[],int n){
char *p;
p=s;
if(n<=10){
while(*p){
if(*p-'0'>n)
return 1;
p++;
}
}
else if(n>10){
while(*p){
if(*p>='A'&&*p-'A'+10>n)
return 1;
p++;
}
}
return 0;
}

void trans(char s[],int n,int m){
int *p,num;
td(s,n,num);
s[0]='\0';
tp(num,m,s);
}
void main(){
int n,m;
char s[size],c;
int fp=1; //是否結束的標志
do{
puts("\t\t\t數據的各個進制之間的轉化\n");
s[0]='\0'; //數組初始化
printf("\n輸入一個數據: "); gets(s); //讀入數據 字元串型
printf("\b輸入原來的進制 和 要轉化的進制, 如 10-2 : ");
scanf("%d%c%d",&n,&c,&m); //讀入 進制轉化 由 n進制轉化為 m進制 輸入形式 如:10-2 16-2
if(check(s,n)) { //判斷是否合法
printf("\n\t錯誤 !輸入的數據與進制不相配, 按任意鍵,繼續輸入。");
getch();
}
else{
printf("\n結果\n\t\t\t%d 進制 : %s ",n,s);
trans(s,n,m);//轉化
printf("\n \t\t\t%d 進制 : %s \n\n",m,s); //輸出 數據 字元串型
printf("\t\t\t繼續輸入 1, 退出輸入 0: ");
scanf("%d",&fp);
}
c=getchar(); //讀取 回車鍵
system("cls");
}while(fp);
}