洛谷 P1424 小鱼的航程(改进版)老是有两个过不去

问题遇到的现象和发生背景

洛谷 P1424 小鱼的航程(改进版)
题目描述
有一只小鱼,它平日每天游泳 250 公里,周末休息(实行双休日),假设从周 x (1≤x≤7) 开始算起,过了 n(n≤10^6) 天以后,小鱼一共累计游泳了多少公里呢?

输入格式
输入两个整数x,n(表示从周x算起,经过n天)。

输出格式
输出一个整数,表示小鱼累计游泳了多少公里。

输入输出样例
输入 输出
3 10 2000

问题相关代码,请勿粘贴截图
#include<stdio.h>
int main(void)
{
    int n, x, t;
    scanf("%d %d", &x, &n);
    unsigned long long journey = (6 - x) * 250;
    t = n - 8 + x;
    if (t <= 0) {
        printf("%lld", journey);
    }
    else
    {
        while (t > 0) {
            if (t > 7) {
                journey += 5 * 250;
                t -= 7;
            }
            else if (t <= 7 && t > 5) {
                journey += 5 * 250;
                break;
            }
            else {
                journey += t * 250;
                break;
            }
        }
        printf("%lld", journey);
    }
    return 0;
}

运行结果及报错内容

img

当n<6-x的时候,计算结果是错误的。代码修改如下:

#include<stdio.h>
int main(void)
{
    int n, x, t;
    scanf("%d %d", &x, &n);
    unsigned long long journey =0;
    if(6-x > n)
    {
        journey = n*250;
        printf("%lld",journey);
        return 0;
    }
    else if(6-x>0)
        journey = (6 - x) * 250;
    t = n - 8 + x;
    if (t <= 0) {
        printf("%lld", journey);
    }
    else
    {
        while (t > 0) {
            if (t > 7) {
                journey += 5 * 250;
                t -= 7;
            }
            else if (t <= 7 && t > 5) {
                journey += 5 * 250;
                break;
            }
            else {
                journey += t * 250;
                break;
            }
        }
        printf("%lld", journey);
    }
    return 0;
}


不建议用unsigned,因为unsigned的数在比较大小时会出问题
改成

long long journey = (6 - x) * 250;