我是编程的初学者,并且正在尝试使用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循环不会停止大于它的平方?我只是好奇不知道为什么
答案 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,您的循环将实际停止。