翁恺c语言习题集提问

有时候人们用四位数字表示一个时间,比如1106表示11点零6分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,即5点30分表示为530。注意,第二个数字表示的分钟数可能超过60,也可能是负数。

输入格式:

输入在一行中给出2个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即5点30分表示为530;流逝的分钟数可能超过60,也可能是负数。

输出格式:

输出四位数字表示的终止时间。题目保证起始时间和终止时间在同一天内。

输入样例:
1120 110
输出样例:
1310

#include 

int main()    
{
    int now;
    int past;
    scanf("%d %d",&now,&past);
    int hour=now/100;
    int min=now%100;
    int total=hour*60+min+past;
    int hour2=total/60;
    int min2=total%60;
    printf("%d %d",&hour2,&min2);
    
    return 0;
}

这个代码哪里错了xdm(真诚发问)

应该是打印结果的printf()语句那里错了,把printf()语句里的两个取址符&去掉,因为打印变量的值不需要取址符,然后根据题目格式,去掉两个%d之间的空格,然后为了让分钟为个位数时打印出前导0,把第二个%d改为%02d即可,修改如下:

参考链接:


#include <stdio.h>
 
int main()    
{
    int now;
    int past;
    scanf("%d %d",&now,&past);
    int hour=now/100;
    int min=now%100;
    int total=hour*60+min+past;
    int hour2=total/60;
    int min2=total%60;
    //  https://blog.csdn.net/qq_41705423/article/details/104648397/ 
    printf("%d%02d",hour2,min2);
    
    return 0;
}
 

img

1、在输出时,应该输出两个数字 hour2 和 min2 的值,而不是它们的地址。应该把 "&" 去掉,然后把 "%d %d" 改成 "%02d%02d"。

2、如果 hour2 大于等于 24,那么程序就计算出了下一天的时间。这个题目要求保证起始时间和终止时间在同一天内,所以 hour2 应该取模 24。

3、当 past 是负数时,total 可能小于 0。此时,应该让 total 加上 24*60,再取模。

修改后的代码如下:

#include <stdio.h>

int main()
{
int now;
int past;
scanf("%d %d",&now,&past);

// 计算总的分钟数
int hour=now/100;
int min=now%100;
int total=hour*60+min+past;

// 计算小时和分钟
int hour2 = total / 60;
int min2 = total % 60;

// 输出结果
printf("%02d%02d", hour2, min2);

return 0;
}

仅供参考,望采纳。