• BUPT复试专题—日期(2013)


    题目描述

    请你计算出第日是第X年的第几天。其中,1月1日是第一天,1月2日是第二天,以此类推。

    计算时请注意闰年的影响。对于非整百年,年数能整除4是闰年,否则不是闰年;对于整百年,年数能整除400是闰年,否则不是闰年。如1900年和1901年不是闰年,而2000年和2004年是闰年。

    输入

    第一行有一个整数 ,表示一共有T组数据需要你处理。
    接下来一共有T行,每行是一个如下格式的字符串:::,表示你需要计算第日是第年的第几天。其中是一个大于0,小于2100的整数。保证字符串的格式都是合法的,字符串所表示的日期也都是存在的。

    输出

    对于每组数据,你需要输出一个整数,表示所求得的结果。

    样例输入

    2
    2013:4:12
    112:4:12

    样例输出

    102
    103

    来源

    2013机考A题 

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<string>
    using namespace std;
    int main() 
    {
        int T;
        cin>>T;
        while(T--)
        {
            string donser;
            cin>>donser;
            int m=donser.find(':'),sum=0;
            for(int i=0;i<m;i++) //////year
            {
                sum+=donser[i]-'0';
                if(i!=m-1)
                    sum*=10;
            }
            int lable=0;
            if(sum%100==0)
            {
                if(sum%400==0)
                    lable=1;
            }
            else if(sum%100!=0)
            {
                if(sum%4==0)
                    lable=1;
            }
            donser.erase(donser.begin(),donser.begin()+m+1);
            int m1=donser.find(':'),sum1=0;
            for(int i=0;i<m1;i++) //////month
            {
                sum1+=donser[i]-'0';
                if(i!=m1-1)
                    sum1*=10;
            }
            donser.erase(donser.begin(),donser.begin()+m1+1);
            int m2=donser.size(),sum2=0;
            for(int i=0;i<m2;i++) //////day
            {
                sum2+=donser[i]-'0';
                if(i!=m2-1)
                    sum2*=10;
            }
            //cout<<sum<<" "<<sum1<<" "<<sum2<<" "<<endl;
            int number=0;
            for(int i=1;i<sum1;i++)
            {
                if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
                    number+=31;
                else if(i==2&&lable==0)
                    number+=28;
                else if(i==2&&lable==1)
                    number+=29;
                else
                    number+=30;
            }
            number+=sum2;
            cout<<number<<endl;
        }
        return 0;
    }
  • 相关阅读:
    JAVA常用运算符
    JAVA基本语义简介
    JAVA常用关键字
    记事本写JAVA程序
    JAVA开发环境搭建
    PROTEL DXP原理图编译 常见错误与处理方法
    关于光耦的认识
    十六进制转十进制函数_C编程
    Protues记录文档_1
    SR触发器和JK触发器
  • 原文地址:https://www.cnblogs.com/dzzy/p/8576581.html
Copyright © 2020-2023  润新知