联发科嵌入式开发笔试-一年中的第几天

一年中的第几天

输入格式为2020-01-03;输出是第3天,题目提示了闰年的计算方法为公历年份是4的倍数的,且不是100的倍数,为普通闰年,或者是400的倍数为世纪闰年。
题记:天数从一月开始算,后面逐天累加,特殊的闰年在2月多了一天。
1.所以首先我们自己记录一个正常年份(非闰年)的天数累加表以便我们在知道月份和天数的情况下直接推算出这是一年中的第几天
daycount = [0,31,59,90,120,151,181,212,243,273,304,334]
2.当判断该年为闰年,就要多加一天,在哪里加呢?如果输入2020-02-29,不加限制,参照上一点列出的累加表,那么就会多算出一天,所以闰年的时候这一天应该加在当输入月份大于2月的月份
今天先给出python代码,C++代码和记忆中其他的题目后续更新:

class Solution:
    def dayOfYear(self, date: str) -> int:
        daycount = [0,31,59,90,120,151,181,212,243,273,304,334]
        temp = date.split("-")
        for i in range(len(temp)):
            temp[i] = int(temp[i])
        res = daycount[temp[1]-1]+temp[2]
        if temp[1]>2:
            if (temp[0]%4==0 and temp[0]%100!=0) or temp[0]%400==0:
                res +=1
        return res

C++代码,大家可以帮忙优化,本来想用strtok这个方法,但是用不清楚就放弃了,用字符串切割来的也挺快,这里给出的代码是leetcode上的形式,联发科笔试题是要自己处理输入的,可以粗暴的用cin>>date;读入整个字符串再进行处理。

class Solution {
public:
    int dayOfYear(string date) {
        int year = 0;
        for(int i=0;i<4;i++){
            year = year*10+(date[i]-'0');//字符与数字间的转换
        }
        int month = (date[5]-'0')*10+date[6]-'0';
        int day = (date[8]-'0')*10+date[9]-'0';
        int res = 0;
        int daycount[12] = {0,31,59,90,120,151,181,212,243,273,304,334};
        res = daycount[month-1]+day;
        if(((year%4==0)&&(year%100!=0))||(year%400==0)){
            if (month>2){
                 res ++;
            }
        }
        return res;
    }
};

打卡day2

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值