如何仅使用添加和赋值执行乘法?

4 c++ math

如何更改以下程序,以便它执行相同的任务,但仅使用添加和分配?

我最多只能添加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)

438*_*427 7

另一种需要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).


har*_*old 6

这不是一般的,它不可能,但只需乘以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中的设置位.