用 C++ 将数字表示为尽可能少的伪二进制数之和


本教程将讨论如何将数字表示为尽可能少的伪二进制数之和。伪二进制数是指仅由二进制数字(即 0 和 1)组成的数字。伪二进制数的示例包括 00、11、10、100、111、1011 等。

以下是一些将数字表示为伪二进制数之和的示例。

Input : 23
Output : 11 + 11 + 1
Explanation : 23 = 11 + 11 + 1, sum of pseudo-binary numbers(11, 11, 1) is 23.

Input : 50
Output : 10 + 10 + 10 + 10 + 10

查找解决方案的方法

以下是查找表示 N 的最小伪二进制数的最佳方法之一。

  • 取一个数字 X,并根据数字 N 的数字将其数字更新为 1 或 0。

  • 检查 N 的每个位置的数字,

    • 如果它是 0,则将 X 的该位置更新为 0。

    • 如果它不是零,则将 X 的该位置更新为 1。

    • 假设 N = 32,则 X 将为 11

  • 然后 X 将是一个伪二进制数。

  • 现在用 X 减去 N 并重复步骤 1,直到 N 变为零。

示例

上述方法的 C++ 代码

#include<iostream>
using namespace std;
int main(){
   int N = 51;
   // find a pseudo-binary number until N becomes 0.
   cout << "pseudo-binary representation of " << N << " is: ";
   while (N > 0){                
      // finding X which contains 0's and 1's according to N.
      int temp = N;
      int X = 0, bit = 1;
      // checking each place of N for zero or non-zero.
      while (temp!=0){
      int last_dig = temp % 10;
      temp = temp / 10;
      if (last_dig != 0)
         X += bit;
         bit *= 10;
      }
      // printing one pseudo-binary number.
      cout << X << " ";
      // Updating N by subtracting with X.
      N = N - X;
       
   }
   return 0;
}

输出

pseudo-binary representation of 51 is: 11 10 10 10 10

理解代码

  • 一个用于获取 N 和在每个位置选择数字以查找 X 的外部 while 循环。

  • 我们使用 N 更新 temp 变量的值,以及用于检查 temp 变量的每个位置并更新变量 X 的该位置的内部循环。

  • 打印 X 的值,因为这一个伪二进制数。

  • 我们通过减去 X 更新 N,并再次进入外部循环,直到 N 变为 0。

结论

在本教程中,我们讨论了如何将数字表示为尽可能少的伪二进制数之和。我们讨论了查找所有伪二进制数的方法。我们还讨论了相应的 C++ 代码,我们可以在其他任何编程语言(如 C、Java、Python 等)中编写。我们希望您觉得本教程有所帮助。

更新于: 2021-11-26

501 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.