用 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++ 代码

Open Compiler
#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; }

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

输出

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 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告