如何更改以下程序,以便它执行相同的任务,但仅使用添加和分配?
我最多只能添加27个,并且必须在单个输入中生成输出.循环等控制流程操作不容许
#include <iostream>
int main()
{
int a;
std::cout << "Enter number: ";
std::cin >> a;
std::cout << a*29 << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
另一种需要7的方法+:
int M1 = a; // 1a
int M2 = M1 + M1; // 2a
int M4 = M2 + M2; // 4a
int M8 = M4 + M4; // 8a
int M16 = M8 + M8; // 16a
int res = M16 + M8 + M4 + M1; // 29a
Run Code Online (Sandbox Code Playgroud)
结果由乘法器的二进制模式构成,即29十进制是0001.1101二进制.所以我们需要添加M16,M8,M4和M1(并排除M2).
这不是一般的,它不可能,但只需乘以29就可以做到这一点:
// x is input
int t = x; // x*1
x = x + x;
x = x + x;
t = t + x; // x*5
x = x + x;
t = t + x; // x*13
x = x + x;
t = t + x; // x*29
Run Code Online (Sandbox Code Playgroud)
这只是展开的二进制乘法,就像类似的答案一样,但没有命名临时结果.添加t对应于29中的设置位.