c语言问题进制转换

如题所述

以下是各种进制的转换方法:
两个进制(其中之一为10进制)之间的互转(手工计算方法)
以2,10进制互转为例,其他请举一反三:
二进制数1101转十进制:
1×2的三次幂+1×2的二次幂+0×2的一次幂+1×2的零次幂=8+4+0+1=13
附加一个八进制转十进制的例子吧:
507(八进制转10进制):
5×8的2次幂+0×8的1次幂+7×8的0次幂=
5×64+0×8+7×1=327(10进制)

以上是小进制向大进制的转换,从2->10和8->10,下面说说大进制向小进制的转换。(方法是相除去余)
10进制327转八进制:
327/8 = 40 余数为7
40/8 = 5 余数为0
于是八进制数为507(第一位5是最后的商)
10进制13转2进制:
13/2 = 6 余数为1
6/2 = 3 余数为0
3/2 = 1 余数为1
所以对应的二进制数为1101(第一位1是最后的商)

再测试一下,把307(10进制)转换为16进制:
307/16 = 19 余数为3
19/16 = 1 余数为3
对应的16进制数应该是:133
再把133转回10进制:
1×16的2次幂+3×16的1次幂+3×16的零次幂
=256+48+3=307
这是程序:
#include <stdio.h>
#define BASE 8 /*要转换成几进制数*/
#define DIGIT 100 /*转换数的位数*/
void main()
{
int i,input;
int x[DIGIT];
printf("Please enter(Enter q to quit)");
scanf("%d",&input);
for (i=0;input!=0;i++)
{
x[i]=input%BASE;
input/=BASE;
}
for (i=i-1;i>=0;i--)
{
printf("%d",x[i]);
}
printf("\n");
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-05
---------------vc6.0测试通过---
----------要更多的进制表示,你可以在switch语句中自己加---------------
-------- 我的可以支持到16进制数的转换------------
#include <stdio.h>
#include <stdlib.h>

void main()
{
int nNum,Rad,i=0,Residue;
int Store[50];
printf("请输入一个任意整数:");
scanf("%d",&nNum);
printf("\n请输入一个合法的表示进制的基数[2,16]:");
scanf("%d",&Rad);
if(Rad<=1)
exit(-1);
printf("\n转换后的结果是:");
while(nNum>=Rad)
{
Residue=nNum%Rad;//0
nNum/=Rad;//1
Store[i]=Residue;//0
++i;
}
Store[i]=nNum;

for(;i>=0;--i)
switch(Store[i])
{
case 0:
printf("0");
break;
case 1:
printf("1");
break;
case 2:
printf("2");
break;
case 3:
printf("3");
break;
case 4:
printf("4");
break;
case 5:
printf("5");
break;
case 6:
printf("6");
break;
case 7:
printf("7");
break;
case 8:
printf("8");
break;
case 9:
printf("9");
break;
case 10:
printf("A");
break;
case 11:
printf("B");
break;
case 12:
printf("C");
break;
case 13:
printf("D");
break;
case 14:
printf("E");
break;
case 15:
printf("F");
break;
}

printf("\n");

}
第2个回答  2010-12-04
#include <stdio.h>
#include <string.h>
void Reveres(char ch[]);
void Atob(int x,int b,char s[]);

int main()
{
int x,b;
char s[80];
scanf("%d %d",&x,&b);
Atob(x,b,s);
Reveres(s);
puts(s);
return 0;
}

void Atob(int x,int b,char s[])
{
int i=0,r;
while (x>0)
{
r=x%b;
if (r<10)
{
s[i]=r+'0';
}
else
{
s[i]=r+55;
}
r=x%b;
x=x/b;
i++;
}
}

/*void Reveres(char ch[])
{
int i,n=strlen(ch),t;
for (i=0; i<n/2; i++)
{
t=ch[i];
chi=ch[n-i-1];
ch[n-i-1]=t;
}
}*/
void Reveres(char ch[])
{
int i,j,n;
i=j=n=0;
while(chn)
{
++n;
j=n-1;
}
while(i<j)
{
n=ch[i];
ch[i]=ch[j];
ch[j]=n;
++i;
--j;
}本回答被提问者和网友采纳
相似回答