赞
踩
满意答案
hufei1113
2013.08.21
采纳率:53% 等级:11
已帮助:8071人
#include
main()
{
char b[17]={"0123456789ABCDEF"};
int c[64],d,i=0,base=16;
long n;
printf("Enter a number:\n");
scanf("%ld",&n);
do //这个循环是要把十进制分离成十六机制数
{
c[i]=n%16; //对16求余之后,c[i]存的就是数就是十六进制数的‘个’,‘十六’,‘二百五十六’位了
i++;
n=n/16; //分离一位之后弃掉一位
}while(n!=0);
/*举例来说你输进去一个数是257
第一个循环n=257
C[0]就是257对十六求余得1,此时n=257
之后 n对16求模,也就是求n中共有多少个16,此时n=16,也就是说n=n/16一句完全可以换为n=(n-n%16)/16 其实n%16就是被抛弃的部分
第二个循环n=16
c[1]=0,n=1
第三个循环n=1
c[2]=1,n=0
n=0退出循环
这样就将257转换为101H可以计算101H=16^2+0*16+1=257结果没有问题
*/
printf("Transmite new base:\n");/*该句在逻辑上是没有用的,就是提示用户输出的数据时转换过的了*/
/*这个循环有什么用?我就知道如果输入个小于16的数能用上吧?
是这样的在出do-while循环后i的值是要大于c里面有效地数据的,所以这个循环要先减一
可以改成这样
i--;
for(i;i>=0;i--)
{
d=c[i];
printf("%c",b[d]);
}
*/
for(--i;i>=0;--i)
{
d=c[i];
printf("%c",b[d]);
}
printf("\n");//该处最好改成 printf("H\n"); 原因:H是十六进制的标志,不改也没有影响,仅是一个建议
}
00分享举报
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。