題目來源:106東區學科能力競賽
gcd轉lcm
#include<bits/stdc++.h>
using namespace std;
int dayInM[12]={31,28,31,30,31,30,31,31,30,31,30,31};
void check(int y){
if((y%4==0 && y%100!=0) || y%400==0){
dayInM[1]=29;
}else{
dayInM[1]=28;
}
return;
}
int gcd(int a,int b){
if(a%b==0){
return b;
}else{
return gcd(b,a%b);
}
}
int main(){
int n;
scanf("%d",&n);
int dt[500];
for(int i=0;i<n;i++){
scanf("%d",dt+i);
}
int y,m,d;
scanf("%d/%d/%d",&y,&m,&d);
for(int i=0;i<n-1;i++){
int d=gcd(dt[i],dt[i+1]);
int min=d*dt[i]/d*dt[i+1]/d;
dt[i+1]=min;
}
d+=dt[n-1];
check(y);
while(d>dayInM[m-1]){
d-=dayInM[m-1];
m++;
if(m>12){
m=1;
y++;
}
check(y);
}
printf("%4d/%02d/%02d",y,m,d);
return 0;
}