/* *一个十进制数,按题目要求转换为特定形式。 *输入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

相关推荐

牛客网
牛客企业服务