关注
/*
*一个十进制数,按题目要求转换为特定形式。
*输入291,二进制数为100100011
*291=2(8)+2(5)+2(1)+2(0)
*但是8也必须转换为特定的形式,除2(1) 2(2) 2(0)不用转换外。
*最终输出为:2(2(2(1)+2(0)))+2(2(2)+2(0))+2(1)+2(0)
*/
#include<iostream>
using namespace std;
//转换函数
void dec_to_2(int num);
//求2^n函数
int n_2(int n);
int main()
{
int dec_num = 0;
cout << "place input num: ";
cin >> dec_num;
cout << dec_num << " = ";
//函数调用
dec_to_2(dec_num);
cout << "\n";
return 0;
}
//转换函数
void dec_to_2(int num)
{
int temp = num;//定义临时变量用于储存下一次递归传入参数
int count_num = 0;
//2进制计算
while(num > 1)
{
num /= 2;
++count_num;
}
//打印
if(num != 0)//num为2的倍数时不打印2(0)
{
cout <<"2(" ;
if(count_num != 0 && count_num !=1 &&
count_num !=2)
{
dec_to_2(count_num );
}
else//防止递归后程序沿原路径返回 count_num 值
{
cout << count_num;
}
cout << ")";
}
//递归调用
if(temp > 1 && (temp !=
n_2(count_num)))//num为2的倍数时末尾不打印'+'
{
cout << " + ";
dec_to_2(temp%(n_2(count_num)));
}
}
//求2^n函数
int n_2(int n)
{
int temp = 1;
while(n != 0)
{
temp *= 2;
--n;
}
return temp;
}
结果如下
place input num: 291
291 = 2(2(2(1) + 2(0))) + 2(2(2) + 2(0)) + 2(1) + 2(0)
Press any key to continue . . .
初学者感觉有点瞎写的,优化什么的没考虑。。。。
查看原帖
点赞 1
相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 春招进度记录 #
45869次浏览 359人参与
# 软开人,说说你的烦心事 #
35859次浏览 228人参与
# Keep实习校招 #
7次浏览 0人参与
# 实习进度记录 #
46942次浏览 374人参与
# 你想吐槽公司的哪些规定 #
11724次浏览 42人参与
# 诺瓦星云求职进展汇总 #
188428次浏览 1623人参与
# 汇川技术求职进展汇总 #
115674次浏览 791人参与
# 一觉醒来,秋招难度下降一万倍…… #
61166次浏览 532人参与
# 小鹏汽车工作体验 #
6747次浏览 44人参与
# 机械人,你的第一份感谢信是谁给的 #
21799次浏览 278人参与
# 打工人的工作餐日常 #
31511次浏览 286人参与
# 打工人的精神状态 #
39252次浏览 781人参与
# 机械制造秋招总结 #
47089次浏览 462人参与
# 参加完秋招的机械人,还参加春招吗? #
38336次浏览 459人参与
# 秋招感动瞬间 #
18980次浏览 187人参与
# 我在牛客求捞 #
37199次浏览 199人参与
# 小厂实习有必要去吗 #
40042次浏览 254人参与
# 找工作如何保持松弛感? #
56695次浏览 811人参与
# 工作经验重要还是工资重要? #
88921次浏览 678人参与
# 秋招被确诊为…… #
153100次浏览 699人参与
# 总结:哪家公司最喜欢泡池子 #
119310次浏览 431人参与