用C++语言 在主函数中输入一个十进制数,调用转换函数把这个十进制数转换成二、八、十六进制数。
2个回答
展开全部
试试这个。采用的算法是权值法呦。新颖。
#include<stdio.h>
int dtob(int x, int b[15] );
main()
{
int i,n,b[15];
printf("\ninput to D:(0 -- 65535)");
scanf("%d",&n);
dtob(n,b);
/* for(i=15;i>=0;i--)
printf("\n");
printf("%d ",b[i]); */
}
/************************************/
int dtob(int x, int b[15] )
{
unsigned int bn[]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768};
char c[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'},o[5]={'0'},h[]={'0','0','0','0'};
int n8,n16,f8,f16,i,j,k,n,no;
n8=n16=0;f8=f16=0;
/*int i,j,k,n,no;*/
no=n=x;
j=k=0;
for(i=15;i>=0;i--)
{
if(n>=bn[i]) {b[i]=1;n=n-bn[i];}
else b[i]=0;
/* printf("%d ",b[i]) ;*/
}
for(i=0;i<=15;i++)
{
f8=f8+b[i]*bn[n8];
printf("(%d) %d =%c= ",n8,f8,c[f8]);
if (n8>1)
{
j++;o[j]=c[f8];
n8=-1;f8=0;
}
n8++;
f16=f16+b[i]*bn[n16];
/* h[k]=c[f16]; */
printf("(%d) %d =%c= ",n16,f16,c[f16]);
if (n16>2)
{
k++;h[k]=c[f16];
n16=-1;f16=0;
}
n16++;
}
printf("\n\nD TO B %d --> ",no);
for(i=15;i>=0;i--)
printf("%d ",b[i]);
printf("\n\n8--- %c%c%c%c%c",o[5],o[4],o[3],o[2],o[1]);
printf("\n\n16-- %c%c%c%c",h[4],h[3],h[2],h[1]);
}
#include<stdio.h>
int dtob(int x, int b[15] );
main()
{
int i,n,b[15];
printf("\ninput to D:(0 -- 65535)");
scanf("%d",&n);
dtob(n,b);
/* for(i=15;i>=0;i--)
printf("\n");
printf("%d ",b[i]); */
}
/************************************/
int dtob(int x, int b[15] )
{
unsigned int bn[]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768};
char c[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'},o[5]={'0'},h[]={'0','0','0','0'};
int n8,n16,f8,f16,i,j,k,n,no;
n8=n16=0;f8=f16=0;
/*int i,j,k,n,no;*/
no=n=x;
j=k=0;
for(i=15;i>=0;i--)
{
if(n>=bn[i]) {b[i]=1;n=n-bn[i];}
else b[i]=0;
/* printf("%d ",b[i]) ;*/
}
for(i=0;i<=15;i++)
{
f8=f8+b[i]*bn[n8];
printf("(%d) %d =%c= ",n8,f8,c[f8]);
if (n8>1)
{
j++;o[j]=c[f8];
n8=-1;f8=0;
}
n8++;
f16=f16+b[i]*bn[n16];
/* h[k]=c[f16]; */
printf("(%d) %d =%c= ",n16,f16,c[f16]);
if (n16>2)
{
k++;h[k]=c[f16];
n16=-1;f16=0;
}
n16++;
}
printf("\n\nD TO B %d --> ",no);
for(i=15;i>=0;i--)
printf("%d ",b[i]);
printf("\n\n8--- %c%c%c%c%c",o[5],o[4],o[3],o[2],o[1]);
printf("\n\n16-- %c%c%c%c",h[4],h[3],h[2],h[1]);
}
追问
额。。我们没有学那个权值法,能不能用声明引用的办法帮我弄一个
追答
完全可以。其中 主要的函数 就是 int dtob(int x, int b[15] ), 只要复制到你的程序中, 在主函数中加以申明,就可以赋初值 调用 了。
int n;
printf("\ninput to D:(0 -- 65535)");
scanf("%d",&n);
dtob(n,b);
也可将其作成 .h 的头文件,用 #include 引用。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//10->2
CString DecimalToBin(int iDecimal)
{
char c[20];
_itoa(iDecimal, c, 2 );
CString str(c);
return str;
}
//10->16
CString DecimalToHex(int iDecimal)
{
char c[20];
sprintf(c, "%x", iDecimal);// _ltoa( l, buffer, 16 );
CString str(c);
return str;
}
//10->8
CString DecimalToOct(int iDecimal)
{
char c[20];
sprintf(c, "%o", iDecimal);
CString str(c);
return str;
}
CString DecimalToBin(int iDecimal)
{
char c[20];
_itoa(iDecimal, c, 2 );
CString str(c);
return str;
}
//10->16
CString DecimalToHex(int iDecimal)
{
char c[20];
sprintf(c, "%x", iDecimal);// _ltoa( l, buffer, 16 );
CString str(c);
return str;
}
//10->8
CString DecimalToOct(int iDecimal)
{
char c[20];
sprintf(c, "%o", iDecimal);
CString str(c);
return str;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询