用 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; }
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 等)中编写。我们希望您觉得本教程有所帮助。
广告