当变量与两位数相乘和相除时,C 停止工作

C stops woking when a vaiable is multiplied and divided with double digit numbers

#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; 不等价:整数除法向零舍入,因此例如第一个表达式从 3 递增 n 4 但不是第二个表达式。

你应该使用浮点运算来解决这个问题:

#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);

    // Calculate number of years until we reach threshold
    double n = s;
    int y = 0;
    while (n < e) {
        n = n * 13.0 / 12.0;
        y++;
    }
    
    // TODO: Print number of years
    printf("Years: %i\n", y);
    return 0;
}