乔鲁诺·乔巴拿的黄金般の题解(无需数组)
2023-11-12 13:48:19
发布于:上海
在做这题之前,我们先解决一个问题,如何用数学方法把一个数字加在一个数字前
首先,通过小学学过的知识可得,一个十进制数(例:111)可以拆成ax1+bx10+cx100+……(如111=1x1+1x10+1x100)
那这时,我们要在111前添加一个数字(如1)那么用数学计算就是111+1*1000
可得把数字c加在数a前的公式是:B(处理后的数)=nx10^a的位数+a
---------------------------------分隔线------------------------------------------------------------------
铺垫好了,接下来是代码过程:
一.先把头文件,命名空间这些写好
#include<iostream>
using namespace std;
int main(){
}
二.创建整型变量,
dec作为输入的十进制数,用cin赋值;
bin作为转换的二进制数,赋初始值0;
cnt作为对bin的位数的计数,赋初始值1;
#include<iostream>
using namespace std;
int main(){
int dec,bin=0,cnt=1;
cin>>dec;
}
三.短除法求二进制数
短除法求余后反着读可以看成将每次模运算后的余数放到第一位
每一次模运算后将余数放到第一位代码由开头的公式(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);
#include<iostream>
using namespace std;
int main(){
int dec,bin=0,cnt=1;
cin>>dec;
while(true){
bin=bin+dec%2*cnt;
dec/=2;
cnt*=10;
if(dec==0) break;
}
}
或
#include<iostream>
using namespace std;
int main(){
int dec,bin=0,cnt=1;
cin>>dec;
do{
bin=bin+decltype%2*cnt;
dec/=2;
cnt*=10;
}while(dec!=0);
}
四.输出
最后输出bin;
#include<iostream>
using namespace std;
int main(){
int dec,bin=0,cnt=1;
cin>>dec;
while(true){
bin=bin+dec%2*cnt;
dec/=2;
cnt*=10;
if(dec==0) break;
}
cout<<bin;
}
或
#include<iostream>
using namespace std;
int main(){
int dec,bin=0,cnt=1;
cin>>dec;
do{
bin=bin+dec%2*cnt;
dec/=2;
cnt*=10;
}while(dec!=0);
cout<<bin;
}
总结:这题实际上完全不需要数组,只需要用一点大脑(和小脑),就可以用数学方法解决。
全部评论 1
6
2024-04-05 来自 江苏
0你好呀慈父233
2024-04-06 来自 上海
0
有帮助,赞一个