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

一年中的第几天

输入格式为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

你可能感兴趣的:(leetcode,笔试面经)