吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 591|回复: 3
收起左侧

[讨论] 用C语言自定义函数实现闰年判断

[复制链接]
5NYouGuo 发表于 2022-11-14 18:55
[C] 纯文本查看 复制代码
#include <stdio.h>
void
OIP-C.jpg

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 5NYouGuo 发表于 2022-11-14 19:03
代码在这里,请不要封贴,手机浏览器出了点问题(显示不全),所以用电脑发帖了,以为可以编辑贴了,可是不能编辑(刚来不熟悉,没有找到在哪里重新编辑贴子),图片也是因为有要求,但是代码和效果图都在手机上,想写在手机上编辑(没找到……)。
[C] 纯文本查看 复制代码
#include <stdio.h>
//普通闰年计算的自定义函数
void runnian(){
    int a;
    printf("请输入年份:");
    scanf("%d",&a);
    if(a % 400 == 0)
    {
        printf("公元%d年是闰年\n",a);
    }
    else if(a % 100 !=0 && a % 4 == 0)
    {
        printf("公元%d年是闰年\n",a);
    }
    else
    {
        printf("不是闰年或者输入错误!\n\n");
    }
    ;
}
//公元前闰年的自定义函数
void gyqrunnian()
{
    int b;
    printf("请输入公元前年份:");
    scanf("%d",&b);
    if( b% 400 == 1)
    {
        printf("公元前%d年是世纪闰年\n",b);
    }
    else if( (b-1)% 4 == 0)
    {
        printf("公元前%d年是闰年\n",b);
    }
    else
    {
        printf("不是闰年或者输入错误\n\n");
    }
    ;
}
int main()
{
    //判断是否需要计算公元前闰年
    
    for(int i = 0;i < 10;i++)
    {
        int years;
        printf("计算年份是否为公元前年份?\n(否为0是为1):");
        scanf("%d",&years);
        //计算公元前年份是否为闰年
        if(years == 1)
        {
            printf("注意,没有公元前0年!\n");
            printf("在关闭程序之前你最多有10次机会\n");
            gyqrunnian();
        }
        //不计算公元前的年份
        else if(years == 0)
        {
            printf("在关闭程序之前你最多有10次机会\n");
            runnian();
        }
        else
        {
            printf("输入错误,须重新运行程序!");
        } ;
        if(i == 9)
            {
                printf("程序结束");
            }
    }
}

Screenshot_2022-11-11-14-27-26-50_84ee7c26b9c3068591a55376042c63b2_compressed.jpg
Screenshot_2022-11-11-14-27-45-68_compressed.jpg
 楼主| 5NYouGuo 发表于 2022-11-14 19:08
公历闰年计算 (按一回归年365天5小时48分45.5秒) 1、非整百年份:能被4整除的是闰年。 (如2004年就是闰年,2001年不是闰年) 地球公转示意图 2、整百年份:能被400整除的是闰年。 (如2000年是闰年,1900年不是闰年) 3、对于数值很大的年份:如果这一年能被3200整除,那么这一年不是闰年,但如果这一年能被172800整除,则为闰年。 如172800年是闰年,86400年不是闰年(因为虽然能被3200整除,但不能被172800整除)。 (此按一回归年365天5h48'45.5''计算)
参考——百度百科


如果有什么更好的计算方法还请纠正,谢谢
frankrx41 发表于 2022-11-17 18:27
本帖最后由 frankrx41 于 2022-11-17 18:28 编辑

C++ 20 标准库实现了一个计算闰年的函数

https://en.cppreference.com/w/cpp/chrono/year/is_leap

这是 vs2022 里它的源代码, 都只考虑了 100 和 400 的情况

File: 14.32.31326\include\chrono#989

[C++] 纯文本查看 复制代码
_NODISCARD constexpr bool is_leap() const noexcept {
    return _Year % 4 == 0 && (_Year % 100 != 0 || _Year % 400 == 0);
}

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-10 14:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表