Coursera 學習記錄:Tomorrow never knows?(實現日期加一的操作)
阿新 • • 發佈:2018-12-16
描述
甲殼蟲的《A day in the life》和《Tomorrow never knows》膾炙人口,如果告訴你a day in the life,真的會是tomorrow never knows? 相信學了計概之後這個不會是難題,現在就來實現吧。 讀入一個格式為yyyy-mm-dd的日期(即年-月-日),輸出這個日期下一天的日期。可以假定輸入的日期不早於1600-01-01,也不晚於2999-12-30。
輸入 輸入僅一行,格式為yyyy-mm-dd的日期。 輸出 輸出也僅一行,格式為yyyy-mm-dd的日期。
提示
閏年的標準: (1)普通年能被4整除且不能被100整除的為閏年。(如2004年就是閏年,1901年不是閏年) (2)世紀年能被400整除的是閏年。(如2000年是閏年,1100年不是閏年) 可以利用一個字元變數吃掉輸入的短橫線(減號),輸出時請活用setfill和setw 控制符。
setfill example
#include <iostream> // std::cout, std::endl #include <iomanip> // std::setfill, std::setw int main () { std::cout << std::setfill ('x') << std::setw (10); std::cout << 77 << std::endl; return 0; } 在這裡 cout << year << '-' << setw(2) << setfill('0') << month << '-' << setw(2)<< setfill('0')<< day << endl;
#include<iostream> #include<iomanip> using namespace std; // 通過字元變數將-吃掉,即:在輸入是用char字元變數來接收 int main() { int year, month, day; char m, n; cin >> year >> m >> month >> n >> day; //下面開始判斷是否為閏年 bool leap = 0; bool special = 0; if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { leap = 1; } // 先處理特殊:閏年以及月增和年增 // 通過一個bool值,來表示是否發生了月增或者年增? if (month == 2) { if (leap == 1 && day == 29) { month += 1; day = 1; special = 1; } if (leap == 0 && day == 28) { month += 1; day = 1; special = 1; } } //然後是處理年增 if (0 < month <= 12) { if (month == 12 && day == 31) { year += 1; month = 1; day = 1; special = 1; } if ((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10) && day == 31) { month += 1; day = 1; special = 1; } if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 30) { month += 1; day = 1; special = 1; } // 這裡使用else並不好 //會出現2000-00-00變成2000-00-01 //else { // day += 1; //} if (special == 0) { day += 1; } } cout << year << '-' << setw(2) << setfill('0') << month << '-' << setw(2) << setfill('0') << day << endl; return 0; }