生命沙漏核心算法

源代码在线查看: arithmetic.c

软件大小: 165 K
上传用户: 顺手一菜刀
关键词: 核心 算法
下载地址: 免注册下载 普通下载 VIP

相关代码

				  /***
				 ***********************************************
				 *说明:
				 *本程序为"生命沙漏"
				 *STM32是否为闰年和相应月份的天数部分算法
				 *文件名称:arithmetic.c
				 *************************************************
				 *包含功能:
				 *1、判断某一年是否为闰年
				 *2、计算某一年某一月的天数
				 *3、计算某一时间段的闰年数
				 *4、计算一个人活了多少天
				 *5、计算一个人的星座
				 *************************************************
				 *当前版本: ve1.0
				 *作者:     吾ARM1
				 *修改时间:2012年4月17日
				 *完成时间: 2012年4月9日
				 *************************************************/
				  #include "arithmetic.h"
				
				/*--------------------
				函数名: Year_Arith
				返回值: 1/0
				输入参数:year
				功能描述:输入年份,可以判断出这一年是否为闰年
				----------------------*/
				u8  Year_Arith(u16 year)
				{
					u16	Year_Mark;
					Year_Mark = year;
					if((Year_Mark%4==0||Year_Mark%400==0)&&(Year_Mark%100!=0))
						return 1;
					else
						return 0;
				
				
				}  
				
				/*--------------------
				函数名: Arith
				返回值: 29/28/30/31
				输入参数:Some_Year,month
				功能描述:输入某一年的某一月得出该月的天数
				----------------------*/
				u8 Day_Arith(u16 Some_Year,u8 month)
				{
					u8	i;
					i = Year_Arith(Some_Year);
					if(month==2&&i==1)
						return	29;
					if(month==2&&i==0)
						return	28;
					switch(month)
					{
					case 1:	return 31;break;
					case 3:	return 31;break;
					case 4: return 30;break;
					case 5: return 31;break;
					case 6: return 30;break;
					case 7: return 31;break;
					case 8: return 31;break;
					case 9: return 30;break;
					case 10: return 31;break;
					case 11: return 30;break;
					case 12: return 31;break;
					}
					
				}
				
				/*--------------------
				函数名: Have_Leap_Year_Arith
				返回值: count,从出生到当前年份的闰年数
				输入参数:Birth_Year,Present_Year两者分别为:出生年份,当前年份
				功能描述:分别输入出生年份和当前年份,最后得出并返回润年数。
				----------------------*/
				u8 Have_Leap_Year_Arith(u16 Birth_Year,u16 Present_Year)
				{
					u8	count=0;
					u8 	flag = 0;
				
					for(Birth_Year=Birth_Year+1;Birth_Year					{	
						flag = Year_Arith(Birth_Year);
						if(flag==1)
						{
							++count;
							flag = 0;
						}
						else
							count = count;
					}
					return	count;
				}
				
				/*--------------------
				函数名: From_Present_Start
				返回值: RFPresent_Start_Day,返回从出生年元月到当前元月的天数,最大值为:65535
				输入参数:FSome_Year,FSome_Month两者分别为:出生年份,当前年份
				功能描述:分别输入某一年和某一月,最后得出从改年起初到改年该月的天数。
				----------------------*/
				u16 From_Present_Start(u16 FSome_Year,u8 FSome_Month)
				{
					u8 i = 0;
					u8 FPresent_Start_Day = 0;
					u16	RFPresent_Start_Day=0;
					i = Year_Arith(FSome_Year);//判断输入年份是否为闰年
					for(;FSome_Month>1;FSome_Month--)
					{
						FPresent_Start_Day = Day_Arith(FSome_Year,FSome_Month);//得出当月天数
						RFPresent_Start_Day = RFPresent_Start_Day+FPresent_Start_Day;//将得出的天数进行垒加
					
					}
					if(i==1) RFPresent_Start_Day = 366 - RFPresent_Start_Day;
					if(i==0) RFPresent_Start_Day = 365 - RFPresent_Start_Day;
					return	RFPresent_Start_Day;
				}
				
				/*---------------------------------------------------------------
				函数名: Have_Day_Arith
				返回值: Day_Num,返回从出生年元月到当前元月的天数,最大值为:65535
				输入参数:Birth_Year1,Present_Year1,Birth_Month,Present_Month,Birth_Day,Present_Day两者分别为:出生年份,当前年份,出生月份,当前月份,出生日,当日 
				功能描述:分别输入出生年月日和当前年月日,最后得出天数并返回。
				-----------------------------------------------------------------*/
				u16 Have_Day_Arith(u16 Birth_Year1,u16 Present_Year1,u8 Birth_Month,u8 Present_Month,u8	Birth_Day,u8 Present_Day)
				{
					u8 Leap_Year_Num1 = 0,Year_Num = 0,i=0,j=0;
					u16	Day_Num,Birth_Day_Num = 0,Present_Day_Num = 0;
					u16	Byear,Fyear;
					 Byear = Birth_Year1;
					 Fyear = Present_Year1;
					 i = Year_Arith(Birth_Year1);
					 j = Year_Arith(Present_Year1); 
					Birth_Day_Num = From_Present_Start(Birth_Year1,Birth_Month);//得出出生当年当月之前的天数
					if(j==1)
					{
						Present_Day_Num =366 - From_Present_Start(Present_Year1,Present_Month);//得出当前年、月之前的天数
					}
					else
						Present_Day_Num =365 - From_Present_Start(Present_Year1,Present_Month);//得出当前年、月之前的天数
					
					Leap_Year_Num1 = Have_Leap_Year_Arith(Byear,Fyear);//得出闰年数
					Year_Num = Fyear-Byear;//得出年数差
					Day_Num = (0*366+((u16)Year_Num-(u16)Leap_Year_Num1-1)*365)+Birth_Day_Num-Birth_Day+Present_Day_Num+Present_Day;//得出总的天数
					return	Day_Num;//返回结果最大为:65535天
				}
				/*---------------------------------------------------------------
				函数名: Constellation_Arith
				返回值: 无
				输入参数:u8	Birth_Month,u8	Birth_Day。出生月,出生日
				功能描述: 根据输入的出生月 和出生日(公历),得出所属星座
				-----------------------------------------------------------------*/
				void Constellation_Arith(u8	Birth_Month,u8	Birth_Day)
				{
				
					if(((Birth_Month==1)&&(Birth_Day>=20))||((Birth_Month==2)&&(Birth_Day					  {
					  	
					 	star = 39;//水
					 	star1 = 40;	//瓶
						//为水瓶座
					  }
					 if(((Birth_Month==2)&&(Birth_Day>=19))||((Birth_Month==3)&&(Birth_Day					 {
					 	 star = 41;//双
					 	star1 = 42;	//鱼
					 	//为双鱼座
					 }
					 if(((Birth_Month==3)&&(Birth_Day>=21))||((Birth_Month==4)&&(Birth_Day					 {
						 star = 43;//白
					 	star1 = 44;	//羊
						//白羊座	
					 }
					 if(((Birth_Month==4)&&(Birth_Day>=20))||((Birth_Month==5)&&(Birth_Day					 {
					 	 star = 37;//金
					 	star1 = 38;	//牛
						 //金牛座
					 }
					 if(((Birth_Month==5)&&(Birth_Day>=21))||((Birth_Month==6)&&(Birth_Day					 {
					 	 	 star = 45;//双
					 	star1 = 46;	//子
						 //双子座
					 }
					 if(((Birth_Month==6)&&(Birth_Day>=22))||((Birth_Month==7)&&(Birth_Day					 {
					 	 	 star = 47;//巨
					 	star1 = 48;	//蟹
						 //巨蟹座
					 }
					 if(((Birth_Month==7)&&(Birth_Day>=23))||((Birth_Month==8)&&(Birth_Day					 {
					 	 star = 49;//狮
					 	star1 = 46;	//子
						 //狮子座
					 }
					 if(((Birth_Month==8)&&(Birth_Day>=23))||((Birth_Month==9)&&(Birth_Day					 {
					 	 	 star = 50;//处
					 	star1 = 51;	//女
						 //处女座
					 }
					 if(((Birth_Month==9)&&(Birth_Day>=21))||((Birth_Month==10)&&(Birth_Day					 {
					 	 	 star = 30;//天
					 	star1 = 52;	//秤
						 //天秤座
					 }
					 if(((Birth_Month==10)&&(Birth_Day>=24))||((Birth_Month==11)&&(Birth_Day					 {
					 	 	 star = 30;//天
					 	star1 = 53;	//蝎
						 //天蝎座
					 }
					 if(((Birth_Month==11)&&(Birth_Day>=22))||((Birth_Month==12)&&(Birth_Day					 {
					 	 star = 54;//射
					 	star1 = 55;	//手
						 //射手座
					 }
					 if(((Birth_Month==12)&&(Birth_Day>=22))||((Birth_Month==1)&&(Birth_Day					 {
					 		 star = 56;//射
					 	star1 = 57;	//手
						 //摩羯座
					 }
				}
				
				/******************* (C) COPYRIGHT 2012 吾ARM1 *****END OF FILE****/
				
				  			

相关资源