注册 登录
编程论坛 C++教室

数学高手进来帮帮忙看看完善下这个码吧@_@!

gzliujie5 发布于 2011-08-13 12:16, 945 次点击
#include "iostream.h"
int main()
{
    int a,b,c;
    char aper,count;
    cout<<"输入日期(如:2005-2-8):";
    cin>>a>>aper>>b>>count>>c;
    cout<<a<<aper<<b<<count<<c<<endl;
    switch ((a+3)/4-a/4&&(a/400+3)-a/400&&(a+399)/400-a/400)
    {
    case 0:
        if(b==1&&c&&c<=31) cout<<a<<"年"<<b<<"月"<<c<<"日是闰年"<<a<<"年的第"<<c<<"天!"<<endl;
        else
        {
            if(b==2&&c<=29) cout<<a<<"年"<<b<<"月"<<c<<"日是闰年"<<a<<"年的第"<<c+31<<"天!"<<endl;
            else
            {
                if(b==3&&c<=31) cout<<a<<"年"<<b<<"月"<<c<<"日是闰年"<<a<<"年的第"<<c+60<<"天!"<<endl;
                else
                {
                    if(b==4&&c<=30) cout<<a<<"年"<<b<<"月"<<c<<"日是闰年"<<a<<"年的第"<<c+91<<"天!"<<endl;
                    else
                    {
                        if(b==5&&c<=31) cout<<a<<"年"<<b<<"月"<<c<<"日是闰年"<<a<<"年的第"<<c+121<<"天!"<<endl;
                        else
                        {
                            if(b==6&&c<=30) cout<<a<<"年"<<b<<"月"<<c<<"日是闰年"<<a<<"年的第"<<c+152<<"天!"<<endl;
                            else
                            {
                                if(b==7&&c<=31) cout<<a<<"年"<<b<<"月"<<c<<"日是闰年"<<a<<"年的第"<<c+182<<"天!"<<endl;
                                else
                                {
                                    if(b==8&&c<=31) cout<<a<<"年"<<b<<"月"<<c<<"日是闰年"<<a<<"年的第"<<c+213<<"天!"<<endl;
                                    else
                                    {
                                        if(b==9&&c<=30) cout<<a<<"年"<<b<<"月"<<c<<"日是闰年"<<a<<"年的第"<<c+244<<"天!"<<endl;
                                        else
                                        {
                                            if(b==10&&c<=31) cout<<a<<"年"<<b<<"月"<<c<<"日是闰年"<<a<<"年的第"<<c+274<<"天!"<<endl;
                                            else
                                            {
                                                if(b==11&&c<=30) cout<<a<<"年"<<b<<"月"<<c<<"日是闰年"<<a<<"年的第"<<c+305<<"天!"<<endl;
                                                else
                                                {
                                                    if(b==12&&c<=31) cout<<a<<"年"<<b<<"月"<<c<<"日是闰年"<<a<<"年的第"<<c+335<<"天!"<<endl;
                                                    else cout<<"错误日期!"<<endl;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        break;
    case 1:
        if(b==1&&c<=31) cout<<a<<"年"<<b<<"月"<<c<<"日是平年"<<a<<"年的第"<<c<<"天!"<<endl;
        else
        {
            if(b==2&&c<=28) cout<<a<<"年"<<b<<"月"<<c<<"日是平年"<<a<<"年的第"<<c+31<<"天!"<<endl;
            else
            {
                if(b==3&&c<=31) cout<<a<<"年"<<b<<"月"<<c<<"日是平年"<<a<<"年的第"<<c+59<<"天!"<<endl;
                else
                {
                    if(b==4&&c<=30) cout<<a<<"年"<<b<<"月"<<c<<"日是平年"<<a<<"年的第"<<c+90<<"天!"<<endl;
                    else
                    {
                        if(b==5&&c<=31) cout<<a<<"年"<<b<<"月"<<c<<"日是平年"<<a<<"年的第"<<c+120<<"天!"<<endl;
                        else
                        {
                            if(b==6&&c<=30) cout<<a<<"年"<<b<<"月"<<c<<"日是平年"<<a<<"年的第"<<c+151<<"天!"<<endl;
                            else
                            {
                                if(b==7&&c<=31) cout<<a<<"年"<<b<<"月"<<c<<"日是平年"<<a<<"年的第"<<c+181<<"天!"<<endl;
                                else
                                {
                                    if(b==8&&c<=31) cout<<a<<"年"<<b<<"月"<<c<<"日是平年"<<a<<"年的第"<<c+212<<"天!"<<endl;
                                    else
                                    {
                                        if(b==9&&c<=30) cout<<a<<"年"<<b<<"月"<<c<<"日是平年"<<a<<"年的第"<<c+243<<"天!"<<endl;
                                        else
                                        {
                                            if(b==10&&c<=31) cout<<a<<"年"<<b<<"月"<<c<<"日是平年"<<a<<"年的第"<<c+273<<"天!"<<endl;
                                            else
                                            {
                                                if(b==11&&c<=30) cout<<a<<"年"<<b<<"月"<<c<<"日是平年"<<a<<"年的第"<<c+304<<"天!"<<endl;
                                                else
                                                {
                                                    if(b==12&&c<=31) cout<<a<<"年"<<b<<"月"<<c<<"日是平年"<<a<<"年的第"<<c+334<<"天!"<<endl;
                                                    else cout<<"错误日期!"<<endl;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        break;
    }
    return 0;
}
18 回复
#2
gzliujie52011-08-13 12:18
有兴趣的帮忙看下,这个码还有很多错误的运算,但是我数学不是很厉害,公式实在不知道杂用了,高手帮忙指点下。
能够帮忙简化和校正,感激不尽啊。
#3
baobaoisme2011-08-13 12:21
天。。。你这代码风格。。。太有爱了。。。
建议把每个月天数保存在一个数组里面,大小设置为12,比如 int days[12],里面初始化为非闰年的每月的天数,如果是闰年那么修改day[1]的天数为29即可,可以看着好很多。。。
#4
naruto012011-08-13 13:36
滚动滑轮 挺有动感
#5
loveshuang2011-08-13 14:54
    简化后的程序:
#include "iostream.h"
int main()
{
    int a,b,c;
    char aper,count;
    cout<<"输入日期(如:2005-2-8):";
    cin>>a>>aper>>b>>count>>c;
    cout<<a<<aper<<b<<count<<c<<endl;

    int key;
    if(a%400==0||a%4==0&&a%100!=0)
        key=1;
    else
        key=0;
    switch (key)
    {
    case 1:
        cout<<a<<"年是闰年"<<endl;
        break;
    case 0:
        cout<<a<<"年是平年"<<endl;
        break;
    }

    int sum=31+28+key+31+30+31+30+31+30+30+31+30+31+c;
    switch(b)
    {
    case 1:
        sum-=31;
    case 2:
        sum-=(key+28);
    case 3:
        sum-=31;
    case 4:
        sum-=30;
    case 5:
        sum-=31;
    case 6:
        sum-=30;
    case 7:
        sum-=31;
    case 8:
        sum-=30;
    case 9:
        sum-=30;
    case 10:
        sum-=31;
    case 11:
        sum-=30;
    case 12:
        sum-=31;
    }
    cout<<a<<aper<<b<<count<<c<<"是"<<a<<"年的第"<<sum<<"天"<<endl;
    return 0;
}
#6
New_Born2011-08-13 15:14


楼猪还有耐心
#7
gzliujie52011-08-13 16:53
回复 5楼 loveshuang
if(a%400==0||a%4==0&&a%100!=0)
这个高手,这个可以解释解释么~~~你的码没有备注,我看得不是很懂,刚学没几天呢~~~
#8
loveshuang2011-08-13 17:38
回复 7楼 gzliujie5
那个是闰年和平年的判断,能被400整除或能被4整除且不能被100整除的就是闰年,闰年和平年的区别不就是二月的不同嘛,就用key表示1或0,在28上加key表示二月的天数。
switch语句也相当于是个条件语句,没有break的时候找到相等的就一直向下执行完;
#9
gzliujie52011-08-13 18:47
呵呵,看懂了,谢谢啊,谢谢了,%是整除,我以为是除了之后可以有小数,如10%3=3.33333...看来我误会了,呵呵。只知道10/3=3.呵呵
十分感谢!

再问个问题~~~  -=是什么意思?sum-=31;   解释下,这个代码我就全懂咯。
#10
gzliujie52011-08-13 18:49
回复 8楼 loveshuang
呵呵,看懂了,谢谢啊,谢谢了,%是整除,我以为是除了之后可以有小数,如10%3=3.33333...看来我误会了,呵呵。只知道10/3=3.呵呵
十分感谢!

再问个问题~~~  -=是什么意思?sum-=31;   解释下,这个代码我就全懂咯。

再帮忙解释解释,呵呵,感激不尽啊,嘿嘿。
#11
loveshuang2011-08-13 18:58
  -=是复合运算符,eg:cout-=31;等价于:cout=cout-31;就是在cout的原来值减去31再赋给cout。
#12
naruto012011-08-14 01:54
补充楼上。

cout -= 31;

不完全等价于


 cout = cout - 31;
#13
qchi2011-08-14 09:09
回复 楼主 gzliujie5
我怎么觉得一个简单的程序编的好复杂
#14
gzliujie52011-08-14 10:13
回复 13楼 qchi
呵呵,因为我刚学,还不会简化程序。
#15
caolei72992011-08-23 12:31
     以后就好了 慢慢练练
#16
风生钧起2011-08-23 12:36
回复 12楼 naruto01
没这方面 知识 有谁能解释下?我记的C中 a += 3   完全等于a = a + 3
#17
dxp444442011-08-23 15:11
弱弱的问一下,#include "iostream.h" 和 #include <iostream> 有区别吗,书上好象说前面的是C的用法
#18
sqqg19862011-08-23 16:17
我们这些新手何时能像gzliujie5一样,程序写的那样简洁呢?我每次处理问题都是像楼主一样好长好长的。
不知道楼主找到答案了没。
sum-=31  ==  sum=sum-31

int a,b=10;
a=b--;
结果:a=10,b=9
a=--b;
结果:a=9,b=9
#19
i_fox2011-08-23 20:51
回复 10楼 gzliujie5
sum-=31就相当于sum=sum-31,将sum-31之后的值赋给的sum
1