如何仅使用添加和分配执行乘法

How to perform a multiplication using only additions and assignments?

本文关键字:执行 分配 何仅使 添加      更新时间:2023-10-16

如何更改以下程序,以便执行相同的任务,但仅使用加法和作业?

i只能进行最大27个添加,并且必须在单个输入中生成输出。循环和其他控制流操作是允许

#include <iostream>
int main()
{
    int a;
    std::cout << "Enter number: ";
    std::cin >> a;
    std::cout << a*29 << std::endl;
    return 0;
}

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

结果是由乘数的二进制模式构造的,即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

这只是展开的二进制乘法,就像类似的答案一样,但没有命名临时结果。t的添加对应于29中的设置位。

这样,您可以使用21个添加。

#include <iostream>
int main()
{
    int a;
    std::cout << "Enter number: ";
    std::cin >> a;
    int b = (a+a+...+a) // 10 times
    b = b + b;
    b = b + (a + a + a ... + a ); // 9 times
    std::cout << b << std::endl;
    return 0;
}

您可以使用其他var吗?

b = a + a + a//3 times a 
b = b + b + b//9 times a
b = b + b + b//27 times a
b = b + a + a//29 times a

乘法只是重复的添加。为此使用循环。您知道您的循环应该执行多少次吗?是的!因此,请使用一个进行循环。

所以这是计划:

  1. 获取输入
  2. 使用一个用于循环执行加法
  3. 输出sum

示例:

// get input
int input;
std::cout << "Enter number: ";
std::cin >> input;
// use a for loop to perform the addition
int sum = 0;
for(int i = 0; i< 29; ++i)
    sum += a;
// output result
std::cout << sum << std::endl;

,retrepetive添加是乘法 - 数学上

因此,对于n次数,重复添加a。简单的for/while循环可以做到这一点

#include <iostream>
int main()
{
    int a,i,temp=0;
    std::cout << "Enter number: ";
    std::cin >> a;
    for(i=1;i<=29;i++)
        temp+=a;//add a repeatedly for 'n' number of times. Here 29 as per your requirement. a*n  
    std::cout << temp <<std::endl; 
    return 0;
}

没有循环

int b=0,result=0;
b=a+a+a+a+a+a+a;\adding for 7 times
result=b+b+b+b+a;\4 times 7 (of a)= 28+a= 29 times (of a).

这涉及10个添加。

您可以尝试 -

b = a + a + a + a + a + a + a + a + a + a + a + a + a + a + a; // equivalent to a*15
b += b -a;

如果仅允许使用+=,并且不允许通过引入其他变量作弊,则除非您沉迷于未定义的行为,让自己允许自己的形式

... + (a += ...) + ...

其中...是任何数量的a +。这里的诀窍是(a += ...)通过评估表达式更改a部分的值。

可能是诱惑,可惜这是不是便携式C ,因为+=+不是测序点。在您的教室编译器上,您也许可以使此功能正常工作。

请参阅https://ideone.com/fc3fai,您可以看到

(a + a + a + a + a + (a += a + a + a) + a + a + a + a + a)

在该特定的编译器上完成工作(在写作时)。(就其价值而言,它在表达式定义明确的Java中也可以做正确的事情)。

您可以多次添加值:

int sum=0;
for(int i=0; i<multipler; i++){
    sum+=a; //adds value of a to itself
}
return sum;

如果您只想乘以2个,则可以向左移动:

a = a << 1;