題目描述 設計一個程序能計算一個日期加上若干天後是什麼日期。 輸入 輸入第一行表示樣例個數m,接下來m行每行四個整數分別表示年月日和累加的天數。 輸出 輸出m行,每行按yyyy-mm-dd的個數輸出。 樣例輸入 1 2008 2 3 100 樣例輸出 2008-05-13 提示 [+] *** 提示已隱藏,點擊上方 [+] 可顯示 *** 來源 北京理工大學計算機專業2008年研究生復試上機試題 [cpp] /********************************* * 日期:2013-2-16 * 作者:SJF0115 * 題號: 天勤OJ 題目1448: 日期累加 * 來源: * 結果:AC * 來源:北京理工大學計算機專業2008年研究生復試上機試題 * 總結: **********************************/ #include<stdio.h> #include<string.h> #include<stdlib.h> //判斷閏年 int leap_year(int year){ if((year%100 != 0 && year%4 == 0) || (year % 400 == 0)){ return 1; } else{ return 0; } } //閏年 int Month[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31}; int main() { int n,i,j,year,month,day,days; //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin); while(scanf("%d",&n) !=EOF){ for(i = 0;i < n;i++){ //輸入每行四個整數分別表示年月日和累加的天數 scanf("%d %d %d %d",&year,&month,&day,&days); //閏年2月29天 if(leap_year(year)){ Month[2] = 29; } else{ Month[2] = 28; } //從month月第一天開始計算 days = days + day; for(j = month;j <= 13;j++){ //到了下一年 if(j == 13){ month = 1; j = 1; year ++; if(leap_year(year)){ Month[2] = 29; } else{ Month[2] = 28; } } //累加的天數不夠這個月的 if(days > Month[j]){ days -= Month[j]; } else{ month = j; break; } }//for //輸出 printf("%d-%02d-%02d\n",year,month,days); } } return 0; } /********************************* * 日期:2013-2-16 * 作者:SJF0115 * 題號: 天勤OJ 題目1448: 日期累加 * 來源: * 結果:AC * 來源:北京理工大學計算機專業2008年研究生復試上機試題 * 總結: **********************************/ #include<stdio.h> #include<string.h> #include<stdlib.h> //判斷閏年 int leap_year(int year){ if((year%100 != 0 && year%4 == 0) || (year % 400 == 0)){ return 1; } else{ return 0; } } //閏年 int Month[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31}; int main() { int n,i,j,year,month,day,days; //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin); while(scanf("%d",&n) !=EOF){ for(i = 0;i < n;i++){ //輸入每行四個整數分別表示年月日和累加的天數 scanf("%d %d %d %d",&year,&month,&day,&days); //閏年2月29天 if(leap_year(year)){ Month[2] = 29; } else{ Month[2] = 28; } //從month月第一天開始計算 days = days + day; for(j = month;j <= 13;j++){ //到了下一年 if(j == 13){ month = 1; j = 1; year ++; if(leap_year(year)){ Month[2] = 29; } else{ Month[2] = 28; } } //累加的天數不夠這個月的 if(days > Month[j]){ days -= Month[j]; } else{ month = j; break; } }//for //輸出 printf("%d-%02d-%02d\n",year,month,days); } } return 0; } 轉載 [cpp] #include<stdio.h> #include<string.h> #include<stdlib.h> int f[13] = {0, 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; bool check(int y) { if (y % 100 == 0) return y % 400 == 0; else return y % 4 == 0; } int main() { int t; scanf("%d", &t); while (t--) { int y, m, d, x; scanf("%d %d %d %d", &y, &m, &d, &x); f[2] = 28 + check(y); d += x; while (d > f[m]) { d -= f[m]; ++m; if (m > 12) { m = 1; ++y; f[2] = 28 + check(y); //重新更新二月份的天數 } } printf("%04d-%02d-%02d\n", y, m, d); } return 0; } #include<stdio.h> #include<string.h> #include<stdlib.h> int f[13] = {0, 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; bool check(int y) { if (y % 100 == 0) return y % 400 == 0; else return y % 4 == 0; } int main() { int t; scanf("%d", &t); while (t--) { int y, m, d, x; scanf("%d %d %d %d", &y, &m, &d, &x); f[2] = 28 + check(y); d += x; while (d > f[m]) { d -= f[m]; ++m; if (m > 12) { m = 1; ++y; f[2] = 28 + check(y); //重新更新二月份的天數 } } printf("%04d-%02d-%02d\n", y, m, d); } return 0; }