标题:被这个题搞自闭了
只看楼主
a1602388940
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2020-3-9
结帖率:50%
已结贴  问题点数:20 回复次数:12 
被这个题搞自闭了
编写函数,输入年、月、日,输出当年剩余天数。在main中输入今天的日期,调用函数并输出今年已过的天数和剩余天数。
搜索更多相关主题的帖子: 调用 输出 输入 天数 函数 
2020-04-13 21:58
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:3 
前面每个月的天数加起来 加 这个月的日期
已过天数和剩余天数
就拿年总天数去减就完事了
都是写简单的加加减减而已

https://zh.
2020-04-13 22:20
fulltimelink
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:171
专家分:752
注 册:2020-4-1
得分:3 
可以转换为时间戳, 年始,当前,年终    /(24*3600) 转换为天
2020-04-14 08:17
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:3 
程序代码:
void foo( unsigned y, unsigned m, unsigned d )
{
    static const unsigned s[2][12] = { {0,31,59,90,120,151,181,212,243,273,304,334}
                                     , {0,31,60,91,121,152,182,213,244,274,305,335} };
    _Bool isleap = (y%400==0 || (y%4==0 && y%100!=0));
    unsigned a = s[isleap][m-1] + d;
    unsigned b = (isleap?366:365) - a;
    printf( "%u, %u\n", a, b );
}
2020-04-14 09:11
return_0
Rank: 8Rank: 8
来 自:五维空间
等 级:禁止访问
威 望:3
帖 子:512
专家分:838
注 册:2020-1-28
得分:3 
回复 楼主 a1602388940
可以用数组储存每月天数

2020-04-14 10:00
a1602388940
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2020-3-9
得分:0 
回复 4楼 rjsp
我还是学的太少了
大佬牛批
2020-04-14 10:12
邹峰研
Rank: 2
等 级:论坛游民
帖 子:46
专家分:18
注 册:2020-3-4
得分:3 
用二维数组,闰年平年分情况讨论,可以先算出已过天数,剩余天数减一下就ok。

今天再晚也是早,明天再早也是晚
2020-04-14 15:04
hbccc
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:108
专家分:315
注 册:2020-2-18
得分:3 
这题烦就烦在有四种天数,31,30,28,29
2020-04-14 20:17
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:3 
我记得这个问题当初我用一句代码实现了的:首先是m-1,接着加天数d,接着假设每个月是30天,所以加上m*30,接着处理大月,由于7月和8月都是大月,所以用一个三目运算m > 7 ? m/2+1 : (m+1)/2,最后处理2月并处理闰年,就是大于2月份的天数减2还是减1.根据这个思想写出的代码如下(未处理闰年):
程序代码:
int sumday(int y, int m, int d)
{
    m--;
    return m * 30 + d + (m > 1 ? -2 : 0) + (m > 7 ? m / 2 + 1 : (m + 1) / 2);
}


对比rjsp版主统计每个月1号的天数,可见结果一样,各位可自行做闰年运算:
1-1:  1,  1
 2-1: 32, 32
 3-1: 60, 60
 4-1: 91, 91
 5-1:121,121
 6-1:152,152
 7-1:182,182
 8-1:213,213
 9-1:244,244
10-1:274,274
11-1:305,305
12-1:335,335

能编个毛线衣吗?
2020-04-14 21:41
fulltimelink
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:171
专家分:752
注 册:2020-4-1
得分:0 
windows 没有strptime 函数...
程序代码:
void theDiff(unsigned year, unsigned month, unsigned day) {
    
    year -= 1900;
    
    struct tm start = { 0 };
    struct tm end = { 0 };

    start.tm_year = year;
    start.tm_mon = 1;
    start.tm_mday = 1;


    end.tm_year = year;
    end.tm_mon = 12;
    end.tm_mday = 31;
    end.tm_hour = 23;
    end.tm_min = 59;
    end.tm_sec = 59;

    time_t startT, currentT, endT;
    startT = mktime(&start);
    currentT = time(NULL);
    endT = mktime(&end);

    double diffPast = difftime(currentT ,startT);
    double diffHas = difftime(endT , currentT);
    printf("%f \t %f\n", diffPast / (24 * 3600), diffHas / (24 * 3600));

}


[此贴子已经被作者于2020-4-15 09:01编辑过]

2020-04-15 08:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-501030-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.427926 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved