问题描述
#include <cs50.h>
#include <stdio.h>
int main(void)
{
// Todo: Prompt for start size
int s;
do
{
s = get_int("Start size : ");
}
while (s < 9);
// Todo: Prompt for end size
int e;
do
{
e = get_int("End size : ");
}
while (e < s);
// Todo: Calculate number of years until we reach threshold
int n = s;
int y = 0;
while (n < e)
{
n = n + n / 3 - n / 4 ;
y++;
}
// Todo: Print number of years
printf("Years: %i\n",y);
}
我能够完美地运行上面的代码并得到想要的结果。然而,当我尝试通过简化数学来替换 n 的计算部分时,代码停止工作,即它不计算它打算计算的内容并将程序保持在输入模式,即它允许您在终端中输入而不给出输出。我用 n 的计算部分替换了 n = (13 * n) / 12
解决方法
由于整数算术,表达式 n = n + n / 3 - n / 4;
和 n = n * 13 / 12;
不等价:整数除法向零舍入,例如第一个表达式将 n
从 3
递增到 { {1}} 但不是第二个表达式。
你应该使用浮点算法来解决这个问题:
4