将m进制转化为n进制

作者&投稿:祗芳 (若有异议请与网页底部的电邮联系)
编写一个c++程序,可以将任意m进制转换为n进制数~

#include
#include
#include "stdlib.h"
#include
#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("数据的各个进制之间的转化
");
s[0]='\0'; //数组初始化
printf("
输入一个数据: "); gets(s); //读入数据 字符串型
printf("\b输入原来的进制 和 要转化的进制, 如 10-2 : ");
scanf("%d%c%d",&n,&c,&m); //读入 进制转化 由 n进制转化为 m进制 输入形式 如:10-2 16-2
if(check(s,n)) { //判断是否合法
printf("
错误 !输入的数据与进制不相配, 按任意键,继续输入。");
getch();
}
else{
printf("
结果
%d 进制 : %s ",n,s);
trans(s,n,m);//转化
printf("
%d 进制 : %s

",m,s); //输出 数据 字符串型
printf("继续输入 1, 退出输入 0: ");
scanf("%d",&fp);
}
c=getchar(); //读取 回车键
system("cls");
}while(fp);
}

一般情况的n进制转m进制,需要先将n进制转为十进制,然后再将十进制转m进制。
除非是n与m之间一个是另一个的整数次幂,就可以直接转换。

将m进制转化为n进制,如果它们不存在整数次幂的关系,就必须先把m进制数先转换为十进制数,然后再把十进制数转换为n进制数。


将m进制转化为n进制
将m进制转化为n进制,如果它们不存在整数次幂的关系,就必须先把m进制数先转换为十进制数,然后再把十进制数转换为n进制数。

各进制转换方法
②n进制转换为十进制:从左到右,各位按照权重n^(位数-1)计算和即可。如3进制的2012转换为十进制:2×3³+0×3²+1×3+2=54+3+2=59 结果三进制2012的十进制数是59。③m进制与n进制的转换,一般需要用十进制数做中间跳板,先把m进制转换为十进制,再把十进制转换为n进制。③有...

c语言m进制转换为n进制
首先按你的先把数值之间的进制搞明白,然后以二进制位单位进行数值转换,相对应的数位如下:1个16进制 = 4个2进制,1个8进制 = 3个2进制,十进制和二进制逐一对换。

用C编写代码 M进制转换成N进制
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;...

怎么编写一个c++程序可以将任意m进制转换为n进制数?
0';\\x0d\\x0a p++;\\x0d\\x0a num=num*n+e;\\x0d\\x0a }\\x0d\\x0a}\\x0d\\x0a\/\/将十进制转化为 m 进制\\x0d\\x0avoid tp(int num,int m,char s[]){ \/\/\\x0d\\x0a int n=0,e;\\x0d\\x0a char *p;\\x0d\\x0a stack b; init(b);\\x0d\\x0a p=s;...

m位十进制数转换为n位二进制数,求m与n的关系
z这个还真有关系~~~是满足2^n>10^m

将一个M进制数转换为N进制数 PASCAL
v:=v*n+t end;num:='';while v<>0 do begin case v mod m of 0: ch:='0';1: ch:='1';2: ch:='2';3: ch:='3';4: ch:='4';5: ch:='5';6: ch:='6';7: ch:='7';8: ch:='8';9: ch:='9';10: ch:='A';11: ch:='B';12: ch:='C';13: ch...

m进制的65=n进制的56,最小的m是多少,最小的n是多少
由题得出6m+5=5n+6 ∴m=(5n+1)\/6 又显然m,n都大于6,且5n必须是奇数,且5n+1必须被3整除 依次测试n=7,9,11,13,最后得出,n=13,m=11

请问进制转换的除n取余法原理是什么,为什么取结果的时候是倒序排列...
除n取余法用于10进制转为n进制,所用的除法是十进制的除法,这一点很重要 插一句,其实把m进制转为n进制都可以用除n取余法,只不过要用m进制的除法,与通常的运算习惯有很大区别,所以会用其他方法代替 第一次除n,得到的余数显然是不足以到n^1的数字,自然放在末位 第二次除n,注意此时算上第...

m位十进制转为n位二进制
z这个还真有关系~~~是满足2^n>10^m

庆城县13660215992: c语言m进制转换为n进制 -
止锦腹膜: 首先按你的先把数值之间的进制搞明白,然后以二进制位单位进行数值转换,相对应的数位如下:1个16进制 = 4个2进制,1个8进制 = 3个2进制,十进制和二进制逐一对换.

庆城县13660215992: 编写一个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...

庆城县13660215992: 用C编写代码 M进制转换成N进制 -
止锦腹膜: 说的太广泛了,要求不明确,如果不是你想要的,还白做.是否支持负数?什么形式输入,什么形式的输e79fa5e98193e59b9ee7ad9431333264656139出?以字符串表示?如果你有所谓的20进制,16,17,18,19怎么表示?g,h,i? 下面这个程序...

庆城县13660215992: 将整数m转换成n进制数,输出. -
止锦腹膜: #include<stdio.h> void d2n(int m,int n) { if(m>=n)d2n(m/n,n); printf("%d",m%n); } int main() { int m,n; scanf("%d%d",&m,&n); if(m<0) {printf("-"); m=-m; } d2n(m,n); return 0; }

庆城县13660215992: 求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; } }

庆城县13660215992: 二进制,八进制,十进制以及十六进制之间怎么互相转换?
止锦腹膜: 十进制转换N(2、8、16)进制:用十进制数除以N取余,结果从下往上倒着写.例:45转换二进制为:101101 N进制数转换十进制数方法:N进制数的每一位上的数字乘以N的M次方,然后把结果相加.(M为N进制数的位数,从零开始数) 例:二进制数101101,转换为十进制数为:1*2^5+1*2^3+1*2^2+1*2^0=45 将八进制数123转十进制数为:1*8^2+2*8+3*8^0=83 二、八、十六进制之间的互转可先转为十进制再转换

庆城县13660215992: 十进制数小数部分如何转化成n进制数?(急) -
止锦腹膜:[答案] 一般来说,十进制数的小数部分是很难转化成有限位n进制数的.举十进制到二进制的转化为例子.十进制数0.3转化成二进制数的方法如下:0.3*2=0.6……整数部分为0,记0;0.6*2=1.2……整数部分为1,记1;0.2*2=0.4……整...

庆城县13660215992: 求一个进制转换的c程序.
止锦腹膜: #include #include #include #include #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 ...

庆城县13660215992: 高中数学题,详细过程或者思路用"除k取余法"将十进制数259转化为五进制数是?请问什么是除k取余法,能不能举个例子?还有如何将m进制数转化为n进... -
止锦腹膜:[答案] 所谓进制数就是以什么为基底,我们平时的数字都是以10为进制,就是“逢十进一”.除k取余法,这个k其实是几进制,余数就是我们所要的进制数.259转换为五进制数.

庆城县13660215992: 帮忙写一个十进制转换为任何进制的C程序
止锦腹膜: 万能进制转换程序 2000-01-30 00:00:00· 常新生·CPCW -------------------------------------------------------------------------------- 罕疚拇咏频幕靖拍詈徒谱坏幕驹沓龇ⅲ肃语言开发了一个万能进制转换程序,可以在任意进制间相互转换. 关键字:进制 C程...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网