用C语言编程将十进制转换为二进制和十六进制

如题所述

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

rzs(long int *w,long int j);
szr(long int *w,long int d);

main()
{
long int a,b,c,x,y;
char e[50];
while(1)
{
do
{
printf("输入转换的原进制数:");
scanf("%ld",&b);
fflush(stdin);
}while(b!=2&&b!=8&&b!=16&&b!=10);
do
{
printf("输入转换之后的进制数:");
scanf("%ld",&c);
fflush(stdin);
}while(c!=2&&c!=8&&c!=16&&c!=10);
if(b==10&&c==16)
{
printf("输入要进行转换的数字:");
scanf("%ld",&a);
printf("%x\n",a);
}
else if(b==16&&c==10)
{
printf("输入要进行转换的数字:");
scanf("%x",&a);
printf("%ld\n",a);
}
else if((b==2||b==8)&&c==10)
{
printf("输入要进行转换的数字:");
scanf("%ld",&a);
rzs(&a,b);
printf("%ld\n",a);
}
else if(b==10&&c==8)
{
printf("输入要进行转换的数字:");
scanf("%ld",&a);
szr(&a,c);
printf("%ld\n",a);
}
else if(b==2&&c==8||c==2&&b==8)
{
printf("输入要进行转换的数字:");
scanf("%ld",&a);
rzs(&a,b);
x=a;
szr(&x,c);
printf("%ld\n",x);
}
else if((b==2||b==8)&&c==16)
{
printf("输入要进行转换的数字:");
scanf("%ld",&a);
rzs(&a,b);
printf("%x\n",a);
}
else if(b==16&&(c==8||c==2))
{
printf("输入要进行转换的数字:");
scanf("%x",&a);
itoa(a,e,2);
printf("%s\n",e);
}
else if(b==10&&c==2)
{
printf("输入要进行转换的数字:");
scanf("%ld",&a);
itoa(a,e,2);
printf("%s\n",e);
}
}
}

rzs(long int *w,long int j)
{
long int k=0,b=0,a[32],f[32],i,c,d=10,e=1;
k=*w;
for(c=0;c<32;c++)
{
if(k/e%d==0)
{
a[c]=0;
e=e*10;
}
else
{
a[c]=k/e%d;
e=e*10;
}
}
for(i=0;i<32;i++)
{
f[i]=pow(j,i);
}
c=0,i=0;
while(c<32||i<32)
{
b=b+a[c++]*f[i++];
}
*w=b;
}

szr(long int *w,long int d)
{
long int a[1000],b=0,i,c=0,e=1,j=0;
b=*w;
for(i=0;;i++)
{
a[i]=b%d;
b=b/d;
c++;
if(b==0)
break;
}
i=c;
while(i>0)
{
a[i]=a[i]*pow(10,i);
e=e/10;
i--;
}
for(i=0;i<c;i++)
{
j+=a[i];
}
*w=j;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-02-27
//十进制转换成二进制,转成16进制懒得写,原理差不多
#include<stdio.h>
int main()
{
int a,sz[100];
int b,c,d=0,l;
for(b=0;b<101;b++) sz[b]=0;
printf("请输入一个十进制的整数:\n");
scanf("%d",&a);
l=a;
printf("\n");
while(a)
{
c=a%2;
a=a/2;
sz[d]=c;
d++;
}
int e;
for(e=100;e>=0;e--)
{
if(sz[e]!=0) break;
}
printf("十进制数%d转换成二进制数为:",l);
int i;
for(i=e;i>=0;i--)
printf("%d",sz[i]);
printf("\n");
}本回答被提问者和网友采纳
第2个回答  2016-01-14
十进制转二进制:-----------------------------------------------
#include<stdio.h>
#include<conio.h>
void main()
{
int d,n,i,j,a[50],Outformat=1;
printf("输入一个数:");
scanf("%d",&n);

if(n==0)
printf("\n十进制 0 转换二进制数:0");
else
{
printf("\n十进制 %d 转换二进制数:1",n);

for(i=1;n!=1;++i)
{
d=n%2;
a[i]=d;
n=n/2;
}

for(j=i-1;j>0;--j)
{
if (Outformat%4==0) printf(" ");//取模的目的是为了每4个一组
++Outformat;
printf("%d",a[j]);
}

}getch();
}

十进制转十六进制:-----------------------------------------------
#include <stdio.h>

void main()
{
int u10;
char u16[10];
int w=0,a,b,i;

printf("请输入一个数字-->");
scanf("%d",&u10);
if(u10==0)
{
u16[0]='0';
w++;
}
else
{
a=u10;
while(a)
{
b=a%16;
if(b<10)
{
u16[w]='0'+b;
}
else
{
u16[w]='A'+b-10;
}
a=a/16;
w++;
}
}
printf("\n");
printf("%d(10)转换为16进制数字为:",u10);
for(i=w-1;i>=0;i--)
{
printf("%c",u16[i]);
}
printf("\n");
}

相关了解……

你可能感兴趣的内容

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