首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求问上这段代码到底哪里耗时间了

2013-03-12 
求问下这段代码到底哪里耗时间了笨鸟在做HDU上的一道题:编写一个函数,其功能是根据表示年月日的三个整型变

求问下这段代码到底哪里耗时间了
笨鸟在做HDU上的一道题:
编写一个函数,其功能是根据表示年月日的三个整型变量year,month和day计算并“返回”下一天的日期。函数名定位NextDay,形式参数及返回类型请自行设计。

我觉得思路还是比较清楚的,但改过去改过来这该死的编译器就是说Time Limited Exceeded求问上这段代码到底哪里耗时间了

求问下大神,我这代码到底哪里耗时间了


#include<iostream>
#include<cmath>
#include<conio.h>
#include<stdlib.h>
using namespace std;
void NextDay(int &year,int &month,int &day);
void Trans(int &year,int &month,int &day,char a[]);

int main()
{
char input[11],flag;
int year,month,day;
cin.getline(input,11);
Trans(year,month,day,input);
do
{
NextDay(year,month,day);
cout<<year<<"."<<month<<"."<<day<<endl;
flag=getch();
}while(flag!='#');
return 0;
}

void NextDay(int &year,int &month,int &day)
{
int Leap=abs(2012-year),month_temp=month,day_temp=day;
bool Leap_Flag = 0;
if(Leap%4 == 0)
{
Leap_Flag = 1;
}
switch (month_temp)
{
case 1:
{
if(day_temp==31)
{
day=1;
month=2;
break;
}
else
{
day++;
break;
}
}
case 2:
{
if(day_temp==29&&Leap_Flag==1 || day_temp==28)
{
day=1;
month=3;
break;
}
else
{
day++;
break;
}
}
case 3:
{
if(day_temp==31)
{
day=1;
month=4;
break;
}
else
{
day++;
break;
}
}
case 4:
{
if(day_temp==30)
{
day=1;
month=5;
break;
}
else
{
day++;
break;
}
}
case 5:
{
if(day_temp==31)
{
day=1;
month=6;
break;
}
else
{
day++;
break;
}
}
case 6:
{
if(day_temp==30)
{
day=1;
month=7;
break;
}
else
{
day++;
break;
}
}
case 7:
{
if(day_temp==31)
{
day=1;
month=8;
break;
}
else
{
day++;
break;
}
}
case 8:
{
if(day_temp==31)
{
day=1;
month=9;
break;
}
else
{
day++;
break;
}
}
case 9:
{
if(day_temp==30)
{
day=1;
month=10;
break;
}
else
{
day++;
break;
}
}
case 10:
{
if(day_temp==31)
{
day=1;
month=11;
break;
}
else
{
day++;
break;
}
}
case 11:
{
if(day_temp==30)
{
day=1;
month=12;
break;
}
else
{
day++;
break;
}
}
case 12:
{
if(day_temp==31)
{
day=1;
month=01;
year++;
break;
}
else
{
day++;
break;
}
}
}
}
void Trans(int &year,int &month,int &day,char a[])
{
char a1[4],a2[2],a3[2];


for(int i=0;i<10;i++)
{
if(i<=3)
{
a1[i]=a[i];
}
if(i>=5 && i<=6)
{
a2[i-5]=a[i];
}
if(i>7)
{
a3[i-8]=a[i];
}
}
year=atoi(a1);
month=atoi(a2);
day=atoi(a3);
}


[解决办法]
你的好复杂!!

//没有检验输入的合法性 
#include <stdio.h>
void NextDay(int*y ,int* m, int* d)
{
  int isleapyear =  (!(*y % 100) &&(*y % 400) ) 
[解决办法]
 !(*y % 4) ;
  static char days[2][12] =
  {
   {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
   {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
  };
  ++*d;
  if(*d > days[isleapyear][*m-1])
  {
    *d = 1;
    ++*m;
    if(*m > 12)
    {
      *m = 1;
      ++*y;
    }
 }
}

int main()
{
 int year,month,day, ch;
 scanf("%d%d%d", &year, &month, &day);
 while((ch = getchar()) != '#')
 {
    if(ch !=  '\n')
    {
      NextDay(&year,&month,&day);
      printf("%d %d %d\n",year, month, day);
    }
 }
 return 0;
}


[解决办法]
不要用switch,case直接定义数组
int day_of_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
如果是闰年day_of_month[1] = 29;
然后直接判断 day 是否等于day_of_month[month];

热点排行