1. 程式人生 > >待除錯程式碼

待除錯程式碼

#include<iostream>
#include<cstdio>
#include<cmath>
int r[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int nt[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char s[13];
int isprime(int x)
{
	if (!x) return true;
	if (x==1) return false;
	for (int a=2;a*a<=x;a++)
		if (x%a==0) return false;
	return true;
}
int if_rain(int year)
{
	if(!(year%4))
		return true;
	if(!(year%400) && !(year%100))
		return true;
	return false;
}
int calculate(int year,int month,int day)
{
	int cnt=0;
	int young=std::min(year,1926),old=std::max(year,1926);
	if(old==young)
	{
		if(month>8)
		{
			for(int i=8;i<=month;i++)
				cnt+=nt[i];
			cnt+=day;
			cnt-=17;
		}
		if(month<8)
		{
			for(int i=month;i<=8;i++)
				cnt+=nt[i];
			cnt+=17;
			cnt-=day;
		}
		if(month==8)
			cnt+=abs(17-day);
		return cnt;
	}
	for(int i=young+1;i<=old-1;i++)
	{
		if(if_rain(i))
			cnt+=366;
		else
			cnt+=365;
	}
	if(young==year)
	{
		if(if_rain(year))
		{
			for(int i=month;i<=12;i++)
				cnt+=r[i];
			cnt-=day;
		}
		else
		{
			for(int i=month;i<=12;i++)
				cnt+=nt[i];
			cnt-=day;
		}
		for(int i=1;i<8;i++)
			cnt+=nt[i];
		cnt+=17;
		return cnt;
	}
	else
	{
		for(int i=8;i<=12;i++)
			cnt+=nt[i];
		cnt-=17;
		if(if_rain(year))
		{
			for(int i=1;i<month;i++)
				cnt+=r[i];
			cnt+=day;
		}
		else
		{
			for(int i=1;i<=month;i++)
				cnt+=nt[i];
			cnt+=day;
		}
		return cnt;
	}
}
int main()
{
//	freopen("r.in","r",stdin);
//	freopen("r.out","w",stdout);
	int n=0;
	scanf("%d",&n);
	for(int k=1;k<=n;k++)
	{
		int a,year=0,month=0,day=0;
		int j;
		scanf("%s",s);
		for(j=0;j<4;j++)
			year=year*10+s[j]-'0';
		for(j=5;j<7;j++)
			month=month*10+s[j]-'0';
		for(j=8;j<10;j++)
			day=day*10+s[j]-'0';
//		printf("%d\n",calculate(year,month,day));
//		/*
		if(year==1926&&month==8&&day==17)
		{
			printf("Niubi\n");
			continue;
		}
		if(!isprime(calculate(year,month,day)))
		{
			printf("Niubi\n");
			continue;
		}
		printf("Haixing\n");
//		*/
	}
	return 0;
}