待除錯程式碼
阿新 • • 發佈:2018-12-13
#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; }