1. 程式人生 > >判斷輸入年份是否為閏年的另一種方法

判斷輸入年份是否為閏年的另一種方法

最近,我在網上看到了一道題目:輸入一個從1901年開始到今年截止的年份,判斷該年份是否為閏年?

對於這個題目,大家應該不會陌生,很多人在學校就應該已經見過了。通常的做法是判斷輸入的年份是否滿足下列兩個條件之一:

1) 能夠被4整除但不能被100整除。

2) 能夠被400整除。

如果滿足兩個條件中的任意一個,那麼該年份就為閏年。

程式流程如下圖所示:

程式程式碼如下:

/**********************************************************************
* 版權所有 (C)2015, Zhou Zhaoxiong。
*
* 檔名稱:JudgeLeapYear.c
* 檔案標識:無
* 內容摘要:判斷輸入的年份是否是閏年
* 其它說明:無
* 當前版本:V1.0
* 作    者:Zhou Zhaoxiong
* 完成日期:20150422
*
**********************************************************************/
#include 


// 重定義資料型別
typedef signed   int   INT32;
typedef unsigned int   UINT32;


/**********************************************************************
* 功能描述:主函式
* 輸入引數:無
* 輸出引數:無
* 返 回 值:無
* 其它說明:無
* 修改日期        版本號     修改人            修改內容
* -------------------------------------------------------------------
* 20150422        V1.0     Zhou Zhaoxiong        建立
***********************************************************************/
INT32 main()
{
        UINT32 iYear = 0;
	
	printf("Please input a year: ");
        while (1)
	{
	        scanf("%d", &iYear);	
		if (iYear > 1900 && iYear < 2016)
		{
		    break;
		}
		else
		{
		    printf("%d is not bigger than 1900 and smaller than 2016, please input again: ", iYear);
		}
	}
	
	if ((iYear%4==0 && iYear%100!=0) || (iYear%400==0))
	{
	    printf("%d is a leap year!\n", iYear);
	}
	else
	{
	    printf("%d is not a leap year!\n", iYear);
	}
	
	return 0;
}

現在,我們換一種思路來考慮。1901年開始到今年截止的年份中,閏年為1904、1908、1912等等,它們之間相差4年。這樣,我們就可以用某個年份作為基準,只要輸入的年份與基準年份之間相差4年,那麼就可以斷定該年份為閏年。這裡,我們選用1900年為基準,只要輸入的年份與1900的差為4的整數倍,那麼該年份就為閏年。

基於此思路,程式流程圖如下:

程式程式碼如下:

/**********************************************************************
* 版權所有 (C)2015, Zhou Zhaoxiong。
*
* 檔名稱:JudgeLeapYear.c
* 檔案標識:無
* 內容摘要:判斷輸入的年份是否是閏年
* 其它說明:無
* 當前版本:V1.0
* 作    者:Zhou Zhaoxiong
* 完成日期:20150422
*
**********************************************************************/
#include 


// 重定義資料型別
typedef signed   int   INT32;
typedef unsigned int   UINT32;


/**********************************************************************
* 功能描述:主函式
* 輸入引數:無
* 輸出引數:無
* 返 回 值:無
* 其它說明:無
* 修改日期        版本號     修改人            修改內容
* -------------------------------------------------------------------
* 20150422        V1.0     Zhou Zhaoxiong        建立
***********************************************************************/
INT32 main()
{
        UINT32 iYear = 0;
	
	printf("Please input a year: ");
	while (1)
	{
	        scanf("%d", &iYear);	
		if (iYear > 1900 && iYear < 2016)
		{
		    break;
		}
		else
		{
		    printf("%d is not bigger than 1900 and smaller than 2016, please input again: ", iYear);
		}
	}
	
	if ((iYear-1900)%4 == 0)
	{
	    printf("%d is a leap year!\n", iYear);
	}
	else
	{
	    printf("%d is not a leap year!\n", iYear);
	}
	
	return 0;
}

不管是上面的哪種解決辦法,程式本身並不複雜,但這樣一種轉換問題求解思路的想法卻廣泛應用於實際的軟體開發工作中。也就是說,很多時候,實現軟體需求的辦法並非只有一個,我們要多思考、善於從不同的角度分析問題,這樣才能夠找到最佳的實現途徑。

相關推薦

判斷輸入年份是否閏年方法

最近,我在網上看到了一道題目:輸入一個從1901年開始到今年截止的年份,判斷該年份是否為閏年?對於這個題目,大家應該不會陌生,很多人在學校就應該已經見過了。通常的做法是判斷輸入的年份是否滿足下列兩個條件

判斷文件是否存在的方法 _access 和 _waccess

alt char* clas printf star 版本 stdlib.h bar data 函數原型: int _access( const char *path, int mode ); int _waccess( const wchar_t *path, int

基於硬體的C(C++)語言程式設計教程9:判斷一個年份是否閏年

本系列文章希望探討以硬體為平臺講述C(C++)知識的一個新的途徑,改變目前大多數C語言教程僅注重C語言本身的語法規則,而脫離其應用環境的現狀。希望讀者通過本教程的學習,能夠立刻學以致用,真正將所學知識應用到專案實踐中。 開發環境:Atmel Studio 7.0 硬體平臺

python關於Decimal保留小數點後尾數的方法

wix 爸爸 方法 ocs ima log tor iuc pytho l674j3匙貝胃巡腿睹http://jz.docin.com/qdt2460f3la1e強稼空沮磺資http://docstore.docin.com/lfuu925whgvv6炕畢俸既講諉http:

jar包引入interlij的方法

jar包引入在webapp的WEB-INF目錄下建個lib,然後把jar包拷貝進去,然後執行圖中操作然後可以查看使用了。jar包引入interlij的另一種方法

Python3創建RIDE桌面快捷方式的方法

文本 comm 嘗試 環境 robot bubuko 分享 找到 .net 今天嘗試了一下Python3下安裝Robot Framework,但是原來的Python2下創建ride快捷方式的方法都不奏效,啟動不了ride。於是,轉為VBS腳本的方式來間接創建快捷方式。畢竟,

創建線程的方法:通過類創建(28-1)

就是 art back threading sel print self. 運行 col 能夠讓CPU運行起來的就是線程! import threadingimport timeclass MyThread(threading.Thread):  def __init_

java 深克隆clone物件或容器的方法

本頁地址:http://blog.csdn.net/lpy3654321/article/details/43054557 java 深clone物件的另一種方法 public static <T> T deepCopy(T src) throws IOException,

【破解 SVIP】提升百度網盤下載速度的方法

友情提示,如果不好使,可以看看其他幾篇: 其他幾個類似工具: 【high-speed-downloader】支援 Mac 和 Windows, 【proxyee-down】支援 Mac 和 Windows, 【pandownload】僅支援 Windows 。 參見: 【

如何能夠精準引流,wxid爆粉還有方法,通訊錄拉群

微信是一個非常大的平臺 很多人都圍繞微信做營銷,微信具有社交、聊天、朋友圈、支付轉賬等功能,是一個可以迅速變現的營銷平臺。 微信加粉系統一直有很多公司和技術人員在開發。 在這裡給大家介紹爆粉之外更加暴力的通訊錄拉群,群營銷雲控系統。 在wxid爆粉之後更加暴力出

jdbc在連線mysql資料庫的時候出現一下問題的時候的解決方法

問題語句:Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any

下載video標籤src資源blob的方法

起因:看到網易雲上的MV,想下載但是F12後發現video標籤內src連結是blob加密後的,沒有源地址,怎麼辦呢?經過網上查詢,找到了一種方法。 如圖所示,視訊連結用blob方法加密。 方法:編輯video標籤,將連結放入到a標籤內獲取源地址。如圖: 確定後網

HBase跨叢集複製資料的方法

2012-08-14 http://abloz.com date:2012.8.14 上一篇文章《hbase 複製備份資料》 中提到用工具CopyTable來在叢集間複製資料。另外還有一種更暴力的方式,來共享HBase備份表。

arcpy縮放至要素的方法

# encoding: utf-8 #獲取地圖文件中的圖層列表 #mxd可引用網路驅動器上的文件 import arcpy from arcpy import mapping mxdpath=r"C:\Users\h\Desktop\fp.mxd" mxd=arcpy.mapping.MapDocu

Java 判斷字串能否轉化數字的三方法

1用JAVA自帶的函式publicstaticboolean isNumeric(String str){   for (int i =str.length();--i>=0;){       i

解決Jasperreport的web列印方法

    昨天下了jasperreport的最新版本3.7.3看了下。弄了半天還是沒能習慣他的報表製作方式。看了下他的列印是利用applet的來列印的。而且還需要客戶端安裝 十幾MB的 jre 關於這個好壞,每個人都有自己的看法。今天我這裡要說的是利用jatoolsprinte

快速備份和還原 MySQL 資料庫的方法

一直使用 SQL Server 作為公司產品的資料庫來儲存系統資料,所以備份還原一直都不是問題,因為 SQL Server 的備份還原非常迅速和易用。但今年公司改變策略,使用起 MySQL 資料庫作為新產品的資料庫後,我們終於遇到了備份還原的大難題:我們需要把客戶的

下載Sourceforge等國內無法下載站點檔案的方法

又在翻牆,哈哈,在sourceforge下東西下不下來,這個方法很不錯。Sourceforge是一些開源軟體經常用到的網站,然而國內的網站一直不穩定,如今是可以訪問,但是一直無法下載,今天發現了一種新方法那就是http://www.mirrorservice.org 這個網站

Android逆向之路---讓我們試試方法看漫畫-(1)

前言 上週博主週末發燒了,所以停更,燒了好幾天,不得不說真的是好難受。 所以呢,希望大家也多注意注意身體。多鍛鍊,畢竟身體才是革命的本錢 本文分析基於:快看漫畫5.2.0(52000) 事先說明,這是一個系列,關於快看漫畫的系列,不過在今天寫看漫畫這個系