| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4069 人关注过本帖, 2 人收藏
标题:计算输入的日期与1949年10月1日距离多少天
只看楼主 加入收藏
huwengui
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:166
专家分:158
注 册:2011-4-22
结帖率:83.33%
收藏(2)
已结贴  问题点数:5 回复次数:9 
计算输入的日期与1949年10月1日距离多少天
从键盘输入一个日期,格式为yyyy-M-d
要求计算该日期与1949年10月1日距离多少天
例如:
用户输入了:1949-10-2
程序输出:1
用户输入了:1949-11-1
程序输出:31
搜索更多相关主题的帖子: 用户 
2011-04-25 21:26
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
做过的练习,求两个日期相隔天数, 仅供参考。
程序代码:

#include <stdio.h>

struct date {
        int year;
        int month;
        int day;
};

int main (void) {

        int getDaysOfDate (struct date d);
        struct date firstDate,secondDate;
        int firstDays,secondDays;

        printf ("Enter first date [yyyy mm dd]:");
        scanf ("%i %i %i",&firstDate.year,&firstDate.month,&firstDate.day);

        printf ("Enter second date [yyyy mm dd]:");
        scanf ("%i %i %i",&secondDate.year,&secondDate.month,&secondDate.day);

        firstDays=getDaysOfDate(firstDate);
        secondDays=getDaysOfDate(secondDate);


        printf ("Two date between the number days is: %i\n",secondDays-firstDays
);

        return 0;

}

int getDaysOfDate (struct date d) {

        int days;

        if(d.month<=2) {
                days=1461*(d.year-1)/4+153*(d.month+13)/5+d.day;
        }else{
                days=1461*d.year/4+153*(d.month+1)/5+d.day;
        }

        if(d.year>=1700&&d.month>=3&&d.day>=1 && d.year<=1800&&d.month<=2&&d.day
<=28) {
                days=days+2;
        }
        if(d.year>=1800&&d.month>=3&&d.day>=1 && d.year<=1900&&d.month<=2&&d.day
<=28) {
                days=days+1;
        }

        return days;

}

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-25 21:55
huwengui
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:166
专家分:158
注 册:2011-4-22
收藏
得分:0 
#include<stdio.h>
int main()
{
 long int sy,sm,sd,ey,em,ed,d;
 long int a1,de1,de2,ds1,ds2,i,r,m,l=0;
 int md[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
 scanf("%d %d %d",&sy,&sm,&sd);

 for(de1=ed,i=em-1;i>0;i--)
  de1+=md[i];
 for(ds1=sd,r=sm-1;r>0;r--)
  ds1+=md[r];
 for(m=sy+1;m<ey;m++)
 {
  if(m%4==0&&m%100!=0||m%400==0)
   l+=1;
  else ;
 }
 a1=(sy%4==0&&sy%100!=0||sy%400==0);
 if (a1&&sm>2)
  ds2=365-ds1;
 else ds2=366-ds1;
 if ((ey%4==0&&ey%100!=0||ey%400==0)&&em>2)
  de2=de1+1;
 else de2=de1;
 if (sy==ey)
 {
  if (a1) d=ds2+de2-366-1;
  else d=ds2+de2-365-1;
 }
 else d=ds2+de2-1+l*366+(ey-sy-1-l)*365;
 printf("%ld",d);
}
2011-04-25 22:37
huwengui
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:166
专家分:158
注 册:2011-4-22
收藏
得分:0 
上面都是两个输入的年份差,,现在求和题目要求一样的~~~
2011-04-25 22:38
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:0 
回复 2楼 ansic
这日子是怎么计算的,能解释下么?

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-04-25 23:18
ppfly
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:297
专家分:1956
注 册:2009-5-17
收藏
得分:1 
正好以前写过一个例子,楼主拿去运行一下试试,注意输入的日期格式。
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int day_month[12]={31,28,31,30,31,30,31,31,30,31,30,31};

int IsLeapYear(int year)
{
    return ((year%400==0) || (year%4==0 && year%100 !=0));
}
long int ChangToLongInt(int year,int month,int day)
{
    return (year*10000+month*100+day);
}
int MainMenu()
{
    char seltstr[100];
    system("CLS");
    printf("\n菜单选项,按键选择!\n\n");
    printf("1:给定日期段,计算相隔天数\n\n");
    printf("2:给定初始日期与相隔天数,计算结束日期\n\n");
    printf("按其他键退出程序!\n\n");
    printf("请选择:");
    scanf("%s",&seltstr);
    if(seltstr[1]=='\0' && (seltstr[0]=='1' || seltstr[0]=='2'))
        return seltstr[0]-'0';
    else
        return 0;
}

long int fun(int *year1,int *month1,int *day1)
{
    (*day1)++;
    if((*month1)==2)
    {   
        if(IsLeapYear(*year1))
        {
            if(*day1-1==day_month[*month1-1])
            {
                *day1=1;
                (*month1)++;
            }
        }
        else
        {
            if(*day1-1==day_month[*month1-1]+1)
            {
                *day1=1;
                (*month1)++;
            }
        }
    }
    else
    {
        if(*day1-1==day_month[*month1-1])
        {
            *day1=1;
            if(*month1<12)(*month1)++;
            else
            {*month1=1;(*year1)++;}
        }
    }
    return ChangToLongInt(*year1,*month1,*day1);
}
int main()
{
   
    long int Date1,Date2,cont,num;
    int tmp;
    int year1,year2,month1,month2,day1,day2;
star_main:
    tmp=MainMenu();
    cont=1;
    if(tmp==1)
    {
        system("CLS");
        printf("\n请按年、月、日顺序输入开始日期,以空格分开,回车符结束:");
        scanf("%d%d%d",&year1,&month1,&day1);
        printf("\n请按年、月、日顺序输入结尾日期,以空格分开,回车符结束:");
        scanf("%d%d%d",&year2,&month2,&day2);
        Date1=ChangToLongInt(year1,month1,day1);
        Date2=ChangToLongInt(year2,month2,day2);
        for(;Date1<Date2;)
        {
            cont++;
            Date1=fun(&year1,&month1,&day1);
        }   
        printf("\n总共相隔  %ld  天\n",cont);
        printf("\n按任意键返回主菜单!\n\n");
        getch();
        goto star_main;
    }
    else if(tmp==2)
    {
        system("CLS");
        printf("\n请按年、月、日顺序输入开始日期,以空格分开,回车符结束:");
        scanf("%d%d%d",&year1,&month1,&day1);

        printf("\n请输入相隔的天数:");
        scanf("%ld",&num);
        cont=1;
        Date1=ChangToLongInt(year1,month1,day1);
        while(cont<num)
        {
            cont++;
            Date1=fun(&year1,&month1,&day1);
        }   
        printf("\n结束日期是  %ld 年 %ld 月 %ld日\n\n",Date1/10000,Date1%10000/100,Date1%100);
       
        printf("\n按任意键返回主菜单!\n\n");
        getch();
        goto star_main;
    }
    else
        return 0;
    return 0;
}



[ 本帖最后由 ppfly 于 2011-4-26 00:40 编辑 ]

********多贴代码,少说空话*******
2011-04-26 00:30
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:1 
int a,b,c,i,s=0,m[12]={31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d%d%d",&a,&b,&c);
if(a<1949)
printf("输入错误");
else if(a==1949)
{if(b<10)
printf("输入错误");
else {for(i=9;i<b-1;i++)
s=s+m[i];s=s+c-1;printf("%d",s);}
}
 
else {for(i=1950;i<a;i++)
s+=365;
if(a%4==0&&b>2)
s++;
for(i=0;i<b-1;i++)
s=s+m[i];
s=s+c+91;
printf("%d",s);
}


[ 本帖最后由 hjywyj 于 2011-4-26 07:33 编辑 ]
2011-04-26 07:31
油炸大虾
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-4-15
收藏
得分:0 
不会
2011-04-26 11:15
wpwxy
Rank: 2
等 级:论坛游民
帖 子:6
专家分:23
注 册:2011-4-28
收藏
得分:3 
要求计算该日期与1949年10月1日距离多少天
1948年应该允许!
#include<stdio.h>
int getDayOfYear(int year, int month, int day)
{
    int days [2][12]={{0,31,28,31,30,31,30,31,31,30,31,30},{0,31,29,31,30,31,30,31,31,30,31,30}};
        int flag =(year%4==0 && year%100!=0) || year%400 == 0 ? 1 : 0;
        int sum = day ;
        for(int i=0;i<month;i++)    {
            sum += days[flag][i];
        }        
        return sum;        
}
int main()
{
 int flag,year,month,day,y,r,sum;
 scanf("%d-%d-%d",&year,&month,&day);
 flag =(year%4==0 && year%100!=0) || year%400 == 0 ? 1 : 0;
  if(year>=1949)
 {   
     y=year-1949;
     r=y/4;
 }
 else
 {
     y=1948-year;
     r=(y+3)/4;
 }
 if(year>1949)
  sum=y*365+r+getDayOfYear(year,month,day);
 else
     if(year==1949)
         sum=getDayOfYear(year,month,day)-getDayOfYear(1949,10,1);
     else
         sum=y*365+r+(365+flag-getDayOfYear(year,month,day))+getDayOfYear(1949,10,1);

 printf("%d",sum);
 return 0;
}
2011-04-28 08:01
因为曾今年少
Rank: 2
等 级:论坛游民
帖 子:131
专家分:62
注 册:2011-4-13
收藏
得分:0 
恩看来大家都是高手啊
来学习下
2011-04-28 08:03
快速回复:计算输入的日期与1949年10月1日距离多少天
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017189 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved