字符串--日期问题

 
 
//某一天后面n天/n月的日期 
#include<cstdio>
#include<string>
#include<stdlib.h>
#include <string.h>
#include<iostream>
using namespace std;
int date[3];
int sum[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int day=1244;
bool run(){
	if((date[0]%4==0&&date[0]%100!=0)||date[0]%400==0)
		return 1;
	return 0;
}
bool add(int start){
	if(run())sum[1]=29;
	else sum[1]=28;
	for(int i=start-1;i<12;i++){
		if(day-sum[i]>=0){
			date[1]++;
			day-=sum[i];
			if(i==11)return 1;	
		}
		else {
			date[2]+=day;
			day=0;
			break;
		}
	}
	return 0;
}
void solution(){
	//增加到下个月的开始
	if(day-(sum[date[1]-1]-date[2]+1)>=0){
		day-=(sum[date[1]-1]-date[2]+1);
		date[2]=1;
		if(date[1]==12)date[1]=1;
		else date[1]++;
		while(add(date[1])){
			date[0]++;
			date[1]=1;
		}
		if(day)date[2]+=day;
	} 
	else 
		date[2]+=day;
}
int main(){
	
	//任意一天是星期几 
	//2018-3-29   比如这个
	
	char s[]="2017-05-04";//398
	//const char *d="-";
	char *p=strtok(s,"-");
	for(int i=0;i<3;i++){
		date[i]=atoi(p);
		//printf("%d",date[i]=atoi(p));
		p=strtok(NULL,"-");
	}
	solution();
	printf("%d-%d-%d\n",date[0],date[1],date[2]);
	return 0;
}
基姆拉尔森计算公式
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1) mod 7
#include<cstdio>
#include<string>
#include<stdlib.h>
#include <string.h>
#include<iostream>
using namespace std;
int date[3];
int main(){
	
	//任意一天是星期几 
	//2018-3-29   比如这个
	while(1){
	char s[100];
	scanf("%s",s);
	char *p=strtok(s,"-");
	for(int i=0;i<3;i++){
		date[i]=atoi(p);
		//printf("%d",date[i]=atoi(p));
		p=strtok(NULL,"-");
	}
	//printf("%d-%d-%d\n",date[0],date[1],date[2]);
	int W,y=date[0],m=date[1],d=date[2];
	W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7;
	printf("星期%d\n",W);
	}
	return 0;
}
2018-3-29
星期4



猜你喜欢

转载自blog.csdn.net/kala0/article/details/79748409
今日推荐