经典程序

日期差值

题目描述
给定两个日期,计算这两个日期之间的天数。如果两个日期是连续的,则规定之间的天数为两天。
输入格式
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出格式
每组数据输出一行,即日期差值
样例输入
20130101
10130105
样例输出
5

思路
令小的日期的天数不断加 1 1 1,直到等于第二个日期为止。
具体处理时,如果当日期的天数 d d d 加到了当前月 m m m 的天数 + 1 +1 +1,就令 m + 1 m+1 m+1 ,并且令 d = 1 d=1 d=1;如果当日期的月份m加到了13,就令 y + 1 y+1 y+1 m = 1 m=1 m=1
注意:如果想要加快速度,只需要先把第一个日期的年份不断加 1 1 1,直到与第二个日期的年份相差 1 1 1 为止,期间想根据平年或是闰年来累加 365 365 365 天或者 366 366 366 天即可。之后再进行不断令天数加 1 1 1 的操作。

#include<iostream>
#include<algorithm>
using namespace std;
int month[13][2]={{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},
                        {31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};
int leap(int y){
	return (y%4==0 && y%100!=0)||(y%400==0);
}
int main()
{
	int time1,y1,m1,d1;
	int time2,y2,m2,d2;
	while(cin>>time1>>time2){
		if(time1>time2) swap(time1,time2); 
		y1 = time1/10000, m1=time1%10000/100, d1=time1%100;
		y2 = time2/10000, m2=time2%10000/100, d2=time2%100;
		int ans=1;     //记录结果
		while(y1<y2 || m1<m2 || d1<d2){
			d1++;      //天数加1
			if(d1 == month[m1][leap(y1)] + 1){
				m1++;
				d1=1;
			}
			if(m1==13){
				y1++;
				m1=1;
			}
			ans++;
		}
		cout<<ans<<endl;
	}
	return 0;
}

进制转换

例如将 P P P 进制的数转换的 Q Q Q 进制数,可分为两步:
1 、 1、 1 P P P 进制数 x x x 转化成为十进制数 y y y

int y=0, t = 1;
while(x != 0){
	y += (x % 10) * t;
	x /= 10;
	t *= P;
}

2 、 2、 2将十进制数 y y y 转化成 Q Q Q 进制数 z z z

int z[40], num=0;   //数组z存放Q进制数y的每一位,num为位数
do{                 //z[num-1] ~ z[0] 保存了Q进制的数
	z[num++] = y % Q; //基数取余
	y /= Q;
}while(y!=0);      //不能换成while循环,因为当y=0时会报错
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值