展开全部
代码设计如下:
int decToBin(int dec){
int result = 0,temp = dec,j = 1;
while(temp){
result = result + j*(temp%2);
temp = temp/2;
k = k*10;
}
return result;
十进制转二进制使用方法
除二取余法,十进制转k进制的方法常用的就是除e68a8462616964757a686964616f31333366306462k取余的方法,这里针对这个方法,给出了C++的代码。需要注意的是,除二取余的方法,对于余数的选取是从后往前取的,所以在代码中,也要解决这个问题才行。
思路分析
模仿不停地除2的过程,每次除2之后用 % 取余数i;用 / 作为下一次除2的被除数temp;j初始化为1,每次除了2之后,j = j*10。
最终输出的结果result在每次除2的迭代中,result = i*j + result;这个从后往前取余数的方法就是不断地result = i*j + result这样,不需要使用数组等方式逆序取了。
同时,也要考虑到十进制的负数如何转化,这里就是while(temp)来解决的。在while语句中,括号内的值只要不是0就为真,这样就包含了负数的问题。
四、总结
这个方法,可以推广到十进制转k进制,需要更改的地方就是 %k 和 /k 就可以。
扩展资料:
n进制转为十进制的代码如下:
#include
#include
#include
#define LENGTH 100
int main(void)
{
long t1;
int i,n,t,t3;
char a[LENGTH];
printf ("请输入数字:\n");
gets(a); //输入n进制数存放到数字a中
strupr(a); //将a中的小写字母转为大写字母
t3=strlen (a); //求出数组a的长度
t1=0;
printf ("请输入进制数(2 or 8 or 16):\n");
scanf ("%d",&n); //输入的是几进制数
for (i=0;i
{
if (a[i]-'0'>=n&&a[i]=n) //判断输入数与进制数是否相符合
{
printf ("输入错误.\n");
exit (0); //退出程序
}
if (a[i]>='0'&&a[i]<='9') //判断是否为数字
{
t=a[i]-'0';
}
else if (n>=11&&(a[i]>='A'&&a[i]<='A'+n-10)) //判断是否为字母
t=a[i]-'A'+10; //求出字母所代表的十进制数
t1=t1*n+t; //求出最终转换成的十进制数
}
printf ("十进制数是:%ld\n",t1); //打印结果
system ("pause");
return 0;
}