解题思路:
用了两种代码:
代码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语言训练-求矩阵的两对角线上的元素之和 (C语言代码)浏览:765 |
C语言程序设计教程(第三版)课后习题8.2 (Java代码)浏览:2287 |
C语言训练-列出最简真分数序列* (C语言代码)浏览:543 |
【回文数(二)】 (C语言代码)浏览:800 |
C语言训练-列出最简真分数序列* (C语言代码)浏览:658 |
【魔板】 (C++代码)(时间超限,希望会的帮我改正一下)浏览:804 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:1968 |
星期判断机 (C语言代码)浏览:892 |
sizeof的大作用 (C语言代码)浏览:1138 |
1051(奇了怪了)浏览:747 |