将十进制数n转化成二进制、八进制和十六进制数。
思路:
1.二进制与八进制数转化方法相同,对n不断取余(直至n为0)放入数组,再逆向输出。
2.十六进制取余所得数需要改成十六进制表示方法,放入数组后再逆向输出。
#include <stdio.h>
#include <stdlib.h>
void zhuanhua(char s[],int n,int p)
{
if(p==2||p==8)
{
int i,m,t=0;
while(n)
{
s[t++]=n%p; //取余放入s数组
n=n/p;
}
for(i=t-1;i>=0;i--)
printf("%d",s[i]);//逆向输出转化后的数
}
if(p==16)
{
int i,m,t=0;
char a[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};//将16进制里的所有字符放入数组
while(n)
{
s[t++]=a[n%p];//取余所得数为a数组下标,对应的16进制数放入s数组内
n=n/p;
}
for(i=t-1;i>=0;i--)
printf("%c",s[i]);//逆向输出
}
}
int main(int argc, char *argv[]) {
int n,p;
char s[100];
scanf("%d%d",&n,&p); //输入数和要转化的进制
zhuanhua(s,n,p); //调用进制转化函数
return 0;
}
输出结果: