找不到乘法的数字的平方

时间:2014-11-26 19:25:35

标签: c++

我是编程的初学者,并且正在尝试使用C ++编写原理和练习来学习C ++。在本书的某些部分,您可以尝试进行一些练习,其中一个练习是关于计算数字的平方,这是我的书中所说的:

  
    

在不使用乘法运算符的情况下实现square(),即通过重复加法执行x * x(将变量结果启动为0并将x添加x次)。

  

我已经找到了这个程序的解决方案,但我的第一个尝试是这样的:

#include <iostream>

int main()
{
    int a = 0;
    std::cout << "Enter an integer value : ";
    std::cin >> a;

    while (a < a * a)
    {

        a += a;
        std::cout << a << "\n";

    }
}

我知道这段代码错了但我无法理解程序的输出,如果我输入5程序打印10 20 30 40 50直到8000,为什么for循环不会停止大于它的平方?我只是好奇不知道为什么

2 个答案:

答案 0 :(得分:7)

试图避免乘法时使用乘法似乎已经破了。那怎么样:

int r = 0;

for (int n = 0; n < a; ++n) {
  r += a;
}

答案 1 :(得分:1)

  

为什么当a大于它的平方时,for循环不会停止?

因为它永远不会。如果您将y=x^2的图表与y=x的图表进行比较,您会看到唯一的时间y=x高于0 < x < 1。整数 1 的情况从未如此。现在,由于我们在谈论存储空间有限的计算机,所以有一种称为溢出的东西,这将导致非常大的数字成为一个非常小的数字。但是,有符号整数溢出是C ++中未定义的行为。因此,一旦你的循环到达发生溢出的点,你就不能依赖于结果。

<子> 1。请注意,当a大于其平方时,但是当它大于或等于到它的平方时,你的循环不会设置为停止。因此,如果a为0或1,您的循环将实际停止。