taozhenJ 2024-11-03 12:27 采纳率: 78.9%
浏览 11
已结题

K纪年法(C++,纠错)

img

img


#include <bits/stdc++.h>
using namespace std;

bool is(int n)
{
    if(n % 4 == 0 && n % 100 != 0 || n % 400 == 0 && n % 3200 != 0) return true;
    return false;
}

int a[15] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int main()
{
    char ch;
    cin >> ch;
    int y, m, d;
    cin >> y >> m >> d;
    if(ch == 'K')
    {
        y -= 1;
        long long c = y * 915 + d;
        for(int i = 1; i < m; i++)
        {
            if(i % 2 == 1) c += 31;
            else c += 30;
        }
        int cy = 2018, cm = 1, cd = 0;
        while(true)
        {
            if(is(cy) && c > 366)
            {
                cy++;
                c -= 366;
            } 
            else if(!is(cy) && c > 365)
            {
                cy++;
                c -= 365;
            }
            else
            {
                break;
            }
        }
        if(is(cy)) a[2] = 29;
         for(int i = 1; i <= 12; i++)
        {
            if(c <= a[i])
            {
                cd = c;
                break;
            }
            c -= a[i];
            cm++;
        }
        cout << cy << " " << cm << " " << cd << endl;
    }
    else
    {
        long long c = d;
        for(int i = y - 1; i >= 2018; i--)
        {
            if(is(i)) c += 366;
            else c += 365;
        }    
        if(is(y)) a[2] = 29;
        for(int i = 1; i < m; i++)
        {
            c += a[i];
        }
        int cy = 1, cm = 1, cd = 0;
        cy += c / 915;
        c %= 915;
        int cur = 31;
        while(c > cur) 
        {
            c -= cur;
            if(cur == 31) cur = 30;
            else cur = 31;
            cm++;
        }
        cd = c;
        cout << cy << " " << cm << " " << cd << endl;
    }
    return 0;
} 

95分?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 11月11日
    • 创建了问题 11月3日