在做这题之前,我们先解决一个问题,如何用数学方法把一个数字加在一个数字前
首先,通过小学学过的知识可得,一个十进制数(例:111)可以拆成ax1+bx10+cx100+……(如111=1x1+1x10+1x100)
那这时,我们要在111前添加一个数字(如1)那么用数学计算就是111+1*1000
可得把数字c加在数a前的公式是:B(处理后的数)=nx10^a的位数+a
---------------------------------分隔线------------------------------------------------------------------
铺垫好了,接下来是代码过程:
一.先把头文件,命名空间这些写好
二.创建整型变量,
dec作为输入的十进制数,用cin赋值;
bin作为转换的二进制数,赋初始值0;
cnt作为对bin的位数的计数,赋初始值1;
三.短除法求二进制数
短除法求余后反着读可以看成将每次模运算后的余数放到第一位
每一次模运算后将余数放到第一位代码由开头的公式(n=dec%2,10^a的位数=cnt,a=bin)得代码:bin=bin+dec%2* cnt;
短除法后dec应除以二得代码:dec/=2;
而cnt为10^bin的位数,操作后bin的位数+1,得代码:cnt=10*(cnt+1),简化为:cnt*=10;
用while循环循环至dec=0,也就是短除法结束,得代码:
while(true){
……
if(dec==0) break;
}
或
do{
……
}while(dec!=0);
或
四.输出
最后输出bin;
或
总结:这题实际上完全不需要数组,只需要用一点大脑(和小脑),就可以用数学方法解决。