|
基本思路:使用反复累加的方法将输入的天数增加到起始日期,将每月的天数放到数组中进行比较,同时判断运行时的年份是否为闰年从而确定2月的天数更改数组中的2月份天数。
运行效果如下,此程序可直接应用于分期分期付款作为天数判断。
运行效果如下。
源代码如下
#include "math.h"
#include "stdio.h"
#include "plc200.h"
FP32 mon[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; //把每月的天数记录到数组中,其中数组的0号在此没有实际意义直接用0填充
void CF_1( U16 s_year, U16 s_month, U16 s_day, U16 day, U16 *e_year, U16 *e_month, U16 *e_day)
{
if ((s_year % 4 == 0 && s_year % 100 != 0) || s_year % 400 ==0) //判断初年是否是闰年
{
mon[2] = 29 ;
}
else
mon[2] = 28;
U16 tmp_y = s_year;
U16 tmp_m = s_month;
U16 tmp_d = s_day;
for ( int i = 1; i <= day; i++)
{
tmp_d += 1; //通过不断的累加天数去加到结束日期
if (tmp_d > mon[tmp_m]) //累加到本月最大天数月数加1,日数到1
{
tmp_d = 1;
tmp_m++;
if (tmp_m > 12) //月数超过12月年数进1,月初到1
{
tmp_y++;
tmp_m = 1;
if ((tmp_y % 4 == 0 && tmp_y % 100 != 0) || tmp_y % 400 ==0) //判断新的一年是否是闰年
{
mon[2] = 29 ;
}
else
mon[2] = 28;
}
}
}
setU16(e_year,tmp_y);
setU16(e_month,tmp_m);
setU16(e_day,tmp_d);
}
|
|