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);
}