一题C语言题目(TC)

[复制链接]
查看11 | 回复2 | 2007-10-20 15:15:50 | 显示全部楼层 |阅读模式
#includevoid main() { int day,month,year,sum,leap; printf("\nplease input year,month,day\n"); scanf("%d,%d,%d",&year,&month,&day); switch(month)/*先计算某月以前月份的总天数*/ { case 1:sum=0;break; case 2:sum=31;break; case 3:sum=59;break; case 4:sum=90;break; case 5:sum=120;break; case 6:sum=151;break; case 7:sum=181;break; case 8:sum=212;break; case 9:sum=243;break; case 10:sum=273;break; case 11:sum=304;break; case 12:sum=334;break; default:printf("data error");break; } sum=sum+day; /*再加上某天的天数*/ if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/ leap=1; else leap=0; if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/ sum++; printf("It is the %dth day.",sum);}
回复

使用道具 举报

千问 | 2007-10-20 15:15:50 | 显示全部楼层
我再发一个吧,交流。。。输入格式照楼主六位数字依次年月日#include "stdio.h" void main(){ int y,m,d,i,total=0; int a[12]={31,28,31,30,31,30,31,31,30,31,30,31}; printf("\nPlease input the date(eg:20071006):"); scanf("%4d%2d%2d",&y,&m,&d); if ((y%400==0) || (y%100!=0 && y%4==0)) a[1]=29; for(i=0;i#include #include void init(struct tm *dat,unsigned long int date){ long int day; ldiv_t fj; dat->tm_hour=23; dat->tm_min=59; dat->tm_sec=0; fj=ldiv(date,10000); dat->tm_year=fj.quot-1900; fj=ldiv(fj.rem,100); dat->tm_mon=fj.quot-1; dat->tm_mday=fj.rem; day=mktime(dat); dat=gmtime(&day);}int main(int argc, char* argv[]){ struct tm *dat; unsigned long int date; int y,m,d; dat=malloc(sizeof(struct tm)); scanf("%ld",&date); init(dat,date); printf("%d\n",dat->tm_yday+1); free(dat); system("pause"); return 0;}//---------------------------------------------------------------------------
回复

使用道具 举报

千问 | 2007-10-20 15:15:50 | 显示全部楼层
可以用月数——天数的交错规律降低运算的复杂度。#include #include main() { int k1,k2,y,m,d,s; printf("请输入日期(如:20070101):");scanf("%4d%2d%2d",&y,&m,&d);k1=m>2?(y%4==0?-1:-2):0; k2=m>8&&m%2!=0?1:0; s=30*(m-1)+m/2+d+k1+k2;printf("%d年%d月%d是%d年的第%d天",y,m,d,y,s); getch(); }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行