首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于用C格式打印数字的问题

关于用C格式打印数字的问题
EN

Stack Overflow用户
提问于 2018-10-03 21:26:51
回答 1查看 319关注 0票数 0

C-方案问题:

我们希望在秒内得到一个正整数,并以HH:MM:SS格式打印它。

例如,如果我们得到3600,我们必须打印01:00:00。或4201 -> 01:10:01 (必须打印前0)。我知道如何获得小时、分钟和秒数,但我的问题是输出格式。

注意:我们不能使用任何与时间相关的函数(例如,time.h函数、结构等等)此外,我们也不能使用if-语句(以检查小时、分钟或秒数是否小于10 )。我们怎么能这么做?有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-03 21:50:09

我们希望在秒内得到一个正整数,并以HH:MM:SS格式打印它。 我知道如何获得小时、分钟和秒数,但我的问题是输出格式。

使用"%02d" @user3121023

"2"是最小文本宽度。

"0"导致填充使用'0'来构成最小宽度。

代码语言:javascript
复制
printf("%02d:%02d:%02d", hour, minute, second);

更有趣的是如何打印所有int total。这在将其分解为hour, minute, secondhour的范围问题时出现了问题。

".2"是最小位宽。这应该与hour一起使用,以确保-7被打印为"-07“而不是"-7”。

代码语言:javascript
复制
#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));
}

示例

代码语言:javascript
复制
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:08
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52635914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档