原题链接:生日日数
解题思路:
用了两种代码:
代码1:用的是以前高斯日记写的代码的思路。一个月一个月加上去,有点慢。
代码2:一年一年地加上去,直到日期不超过365,才判断是该年的哪一月哪一日。
参考代码:
代码1:用的是以前高斯日记写的代码。一个月一个月加上去,有点慢。
#include <stdio.h>
int leap(int year)
{
if(year%4==0 && year%100!=0 || year%400==0)
return 1;
else
return 0;
}
int main()
{
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int y,m,d,days;
while(scanf("%d%d%d",&y,&m,&d)!=EOF)
{
days=10000+d;
if(leap(y)) month[2]=29;
else month[2]=28;
while(days>month[m])
{
days=days-month[m];
m++;
if(m>12)
{
m=m-12;
y++;
if(leap(y)) month[2]=29;
else month[2]=28;
}
}
d=days;
printf("%d-%d-%d\n",y,m,d);
}
return 0;
}代码2:重新写的一份代码,一年一年地加上去,直到日期不超过365,才判断是该年的哪一月哪一日。
#include<iostream>
using namespace std;
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool leap(int year)
{
if(year%4==0 && year%100!=0 || year%400==0)
return true;
else
return false;
}
int main()
{
int yy,mm,dd; //出生日期
int y,m,d; //10000天后的日期
while(cin>>yy>>mm>>dd)
{
int sum=10000;
for(int i=1;i<mm;i++)
sum=sum+month[i];
if(mm>2 && leap(yy))
sum++;
sum=sum+dd;
for(y=yy;sum>=365;y++)
{
if(leap(y))
sum=sum-366;
else
sum=sum-365;
}
for(m=1;m<=12;m++)
{
if(sum>month[m])
{
sum=sum-month[m];
if(m==2 && leap(y))
sum--;
}
else
{
d=sum;
break;
}
}
cout<<y<<"-"<<m<<"-"<<d<<endl;
}
return 0;
}0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复