1. 程式人生 > >計算兩個日期的間隔天數(難度:1顆星)

計算兩個日期的間隔天數(難度:1顆星)

問題描述:

輸入兩個日期,日期的格式由3個正整陣列成(正整數之間用空格分開),計算兩個日期的差值(不管第一個輸入的日期大還是第二個輸入的日期大,始終用大的那個日期減去小的那個日期),如果兩個日期中有一個不合法,比如:2008 1 32(這個就不合法,因為天數超過了1月的最大天數31),直接輸出“輸入日期無效”,否則輸出兩個日期的差值。

輸入舉例:

1999 1 21
2000 1 21

那麼輸出的相隔的天數為:
365

參考程式碼:

#include <stdio.h>

int arr[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30
, 31 }; int IsLeapYear(int year) { return ((year % 4 == 0) && (year % 100)) || (year % 400 == 0); } int GetPassedMonthDays(int year, int month, int day) {//計算因為月份相差的天數 int sum = day; for (int i = 1; i < month; i++) sum += arr[i]; if (month > 2 && IsLeapYear(year)) sum += 1
; return sum; } int GetDiffYearDays(int year1, int year2) {//計算因為年份,相差的天數 int sum = (year2 - year1) * 365; for (int i = year1; i < year2; i++) { if (IsLeapYear(i)) sum += 1; } return sum; } int isvalid(int year, int month, int day) {//判斷輸入的日期是否有效 if (month < 0
|| month > 12) return 0; if (day < 0) return 0; if (month == 2) { if ((IsLeapYear(year) && day > 29) || (!IsLeapYear(year) && day > 28)) return 0; } else { if (day > arr[month]) return 0; } return 1; } int IsGreater(int year1, int month1, int day1, int year2, int month2, int day2) {//判斷兩個日期那個更大 if (year1 != year2) return year1 > year2 ? 1 : 0; if (month1 != month2) return month1 > month2 ? 1 : 0; if (day1 != day2) return day1 > day2 ? 1 : 0; return 0; } int main() { int year1, month1, day1, year2, month2, day2; printf("請輸入第一個日期的年月日,用空格隔開\n"); scanf_s("%d%d%d", &year1, &month1, &day1); printf("請輸入第二個日期的年月日,用空格隔開\n"); scanf_s("%d%d%d", &year2, &month2, &day2); if (!isvalid(year1, month1, day1) || !isvalid(year2, month2, day2)) { printf("輸入日期無效\n"); return 0; } if (IsGreater(year1, month1, day1, year2, month2, day2)) printf("相差天數:%d天\n", GetDiffYearDays(year2, year1) - GetPassedMonthDays(year2, month2, day2) + GetPassedMonthDays(year1, month1, day1)); else printf("相差天數:%d天\n", GetDiffYearDays(year1, year2) - GetPassedMonthDays(year1, month1, day1) + GetPassedMonthDays(year2, month2, day2)); return 0; }

執行結果:

這裡寫圖片描述

相關推薦

計算日期間隔天數難度1

問題描述: 輸入兩個日期,日期的格式由3個正整陣列成(正整數之間用空格分開),計算兩個日期的差值(不管第一個輸入的日期大還是第二個輸入的日期大,始終用大的那個日期減去小的那個日期),如果兩個日期中有一個不合法,比如:2008 1 32(這個就不合法,因為天數超

空瓶換汽水問題難度1

問題描述: 超市規定每n個空汽水瓶可以換一瓶汽水,小李有m個空汽水瓶,最多可以換幾瓶汽水(提示:可以先喝汽水,再還超市空瓶,但是一定要還哦) 輸入輸出描述: n和m由外部輸入的正整數,並且保證n的範圍是【2,10000000】,m的範圍是【1,10000000】,輸出最多喝了多少

約瑟夫環問題難度1

問題描述: 編號為1,2,…,n的n個人按順時針方向圍坐一圈,任選一個正整數作為報數上限m,從第一個人開始按順時針方向從自1開始順序報數,報道m時停止報數.報m的人出列,從他的順時針方向上的下一個人開始重新從1報數,如此下去,直至所有人全部出列為止,設計一個程式求出出列順序. 輸入輸

輸出螺旋陣列難度1

輸入n*n矩陣的n值,打印出一個螺旋矩陣,如下面例子: 當n= 5時,輸出 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23

MYSQL如何計算日期間隔天數

如何透過MYSQL自帶函式計算給定的兩個日期的間隔天數 有兩個途徑可獲得 1、利用TO_DAYS函式 select to_days(now()) - to_days('20120512') 2、利用DATEDIFF函式 select datediff(now(),'201205

Qt 計算日期間隔天數

//時間計演算法則/***********************************************************************************************/bool Widget::IsLeap(int year){ 

資料插入到有序陣列難度

問題描述: 輸入一個有序的整數序列(從小到大排列),然後再輸入一個需要插入到陣列中的整數,輸出插入資料之前和之後的數列。(要保證插入資料之後數列仍然是從小到大排列)。 例如: 輸入數列: 1 2 4 5 待插入資料: 3 插入資料後的資料: 1 2 3 4 5 參考程式碼

約瑟夫環問題難度2

問題描述: 編號為1,2,…,n的n個人按順時針方向圍坐一圈,任選一個正整數作為報數上限m,從第一個人開始按順時針方向從自1開始順序報數,報道m時停止報數.報m的人出列,從他的順時針方向上的下一個人開始重新從1報數,如此下去,直至所有人全部出列為止,輸出最後一個出列的人的編號。 輸入

括號匹配檢測難度

問題描述: 輸入一個字串,字串中只包含兩種字元:’(‘和’)’,判斷字串的括號是否匹配,如果匹配輸出YES,否則輸出NO。 例如: (())是匹配的 ()))是不匹配的 參考程式碼: #define _CRT_SECURE_NO_WARNINGS #include <

可逆素數難度

問題描述: 可逆素數是指該數本身是一個素數,並且把該數倒過來也是一個素數。 例如:1091是一個素數,把它倒過來1901也是一個素數,所以我們就說1091是一個可逆素數(同理1901也是一個可逆素數) 輸出所有範圍在【1000,9999】並且各位數之和是11的整數倍的可逆素數。

求解同餘方程組難度2

問題描述: 有一個同餘方程組,有N個同餘方程組成(N由使用者輸入),另外每個同餘方程的a[i]和m[i]也又使用者指定,如下所示: x≡a[1](mod m[1]) x≡a[2](mod m[2]) x≡a[3](mod m[3]) x≡a[4](mod m[4]) … x

java 計算生日 剩餘天數 日期間隔天數

 public Object decorate(Object columnValue, PageContext pageContext, MediaTypeEnum media) throws DecoratorException    {        Object obj

php 計算日期相差天數

class end rto date 日期相差 天數 day sharp echo php 計算兩個日期相差天數 <?php $startdate=strtotime("2013-3-09"); $enddate=strtotime("2013-

js計算日期天數差值

函數 ber parseint pre days var 毫秒 cti param js計算兩個日期的天數差值 通過兩個日期計算這兩個日期之間的天數差值 /** * 計算天數差的函數,通用 * @param sDate1 * @param sDate2 * @ret

java實現計算日期相差天數

要求:計算1999年1月1日和2018年11月3日相差多少天 思路: 1、每年的天數累加,需判斷閏年、平年 2、每月的天數累加,不同月份天數不同,平年和閏年,2月份的天數也不同 3、將日期天數累加 (因為計算的是相差的天數,所以這個天數需要減1天,所以這裡加2就可以了) packag

Java中計算日期間隔多少天

String dbtime1 = "2017-02-23";  //第二個日期 String dbtime2 = "2017-02-22";  //第一個日期//算兩個日期間隔多少天SimpleDat

java 計算日期之間天數

 import java.text.ParseException; import java.text.SimpleDateFormat; /** * @author JavaAlpha * @

java怎麼計算日期間隔的天,月,年

由昨天下班前的一段對話引出: “A:折騰了一天,總算吧時間間距n個月演算法寫好了”  “B:出於經驗,calendar類或者是common.lang肯定有現成函式” 直接貼程式碼。 System.out.println(DurationFormatUtils.formatPeriod(new Date(

JavaScript計算日期相差天數,週數

//返回兩個日期相差的天數 function WeeksBetw(date1,date2) { //這裡的date1、date2為日期的字串 //將date1,date2轉換為Date物件 var _dt1=new Date(date1); var _dt2=new Date(date2); var dt1=

計算日期相差天數的最簡潔的代碼

string 不同 都是 card tps 飛機 ret con 使用數組 國際慣例,轉載註明出處。大飛機: https://user.qzone.qq.com/16491848/blog/1551429397?source=namecardword 1 stati