計算兩個日期的間隔天數(難度: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