C-方案问题:
我们希望在秒内得到一个正整数,并以HH:MM:SS格式打印它。
例如,如果我们得到3600,我们必须打印01:00:00。或4201 -> 01:10:01 (必须打印前0)。我知道如何获得小时、分钟和秒数,但我的问题是输出格式。
注意:我们不能使用任何与时间相关的函数(例如,time.h函数、结构等等)此外,我们也不能使用if-语句(以检查小时、分钟或秒数是否小于10 )。我们怎么能这么做?有可能吗?
发布于 2018-10-03 21:50:09
我们希望在秒内得到一个正整数,并以HH:MM:SS格式打印它。 我知道如何获得小时、分钟和秒数,但我的问题是输出格式。
使用"%02d" @user3121023。
"2"是最小文本宽度。
"0"导致填充使用'0'来构成最小宽度。
printf("%02d:%02d:%02d", hour, minute, second);更有趣的是如何打印所有int total。这在将其分解为hour, minute, second和hour的范围问题时出现了问题。
".2"是最小位宽。这应该与hour一起使用,以确保-7被打印为"-07“而不是"-7”。
#define SECS_PER_MIN 60
#define MINS_PER_HOUR 60
// Print time, valid for all `int`
void print_hms(int total /* total seconds */) {
int sec = total%SECS_PER_MIN;
total /= SECS_PER_MIN;
int min = total%MINS_PER_HOUR;
total /= MINS_PER_HOUR;
int hour = total;
// use abs() to print negative, `min,sec` without a sign
printf("%0.2d:%02d:%02d", hour, abs(min), abs(sec));
}示例
print_hms(0);
print_hms(3600 + 23*60 + 45);
print_hms(24*3600);
print_hms(-7*3600);
print_hms(INT_MIN);
00:00:00
01:23:45
24:00:00
-07:00:00
-596523:14:08https://stackoverflow.com/questions/52635914
复制相似问题