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

大家帮忙看看这个程序有问题没 谢谢了

续写回忆 发布于 2012-10-19 14:32, 394 次点击
求某天是某年的第几天问题

输入某年某月某日,然后算出这是这一年的第几天,比如输入2007 1 3 然后输出是 第三天 3
 我的思路是先判断是否闰年,然后再根据是哪个月的 然后再求出是第几天 不知道下面这个程序还有没考虑到的地方没 ,望大家帮忙看看 谢谢了 本人初学c
# include <iostream>
using namespace std;

class srsj
{
public:
    int in()
    {
        int a,b,c,i,n;
        cin>>n;
        for (i=1;i<=n;i++)
        {
            cin>>a>>b>>c;
            if ((a%4==0 && a%100!=0) || a%400==0)  //判断是否闰年
            {
                if (b<2)
                    cout<<c;
                else if (b>=2&&b<=3)
                    cout<<(b-2)*28+31+c<<endl;
                else if (b>3&&b<=5)
                    cout<<(92+(b-4)*30+c)<<endl;
                else if (b>5&&b<=7)
                    cout<<(153+(b-6)*30+c)<<endl;
                else if (b==8)
                    cout<<(214+c)<<endl;
                else if (b>8&&b<=10)
                    cout<<(245+(b-9)*30+31)<<endl;
                else if (b>10&&b<=12)
                    cout<<(306+(b-11)*30+31)<<endl;
            }
            else
            {
                if (b<2)
                    cout<<c;
                else if (b>=2&&b<=3)
                    cout<<(b-2)*30+31+c<<endl;
                else if (b>3&&b<=5)
                    cout<<(92+(b-4)*30+c)<<endl;
                else if (b>5&&b<=7)
                    cout<<(153+(b-6)*30+c)<<endl;
                else if (b==8)
                    cout<<(214+c)<<endl;
                else if (b>8&&b<=10)
                    cout<<(245+(b-9)*30+31)<<endl;
                else if (b>10&&b<=12)
                    cout<<(306+(b-11)*30+31)<<endl;
            }
            
        }
        return 0;
    }
}pd;


int main ()
{
    pd.in();
    return 0;
}

[ 本帖最后由 续写回忆 于 2012-10-21 17:04 编辑 ]
7 回复
#2
天剑山2012-10-20 14:38
....楼主这样发帖是不会有人来看的.....最起码你要把求解的基本思路贴出来,比如求函数的零点的二分法,你这样让人完全不知道那一大堆比较是干嘛的.........
#3
续写回忆2012-10-21 17:00
回复 2楼 天剑山
嗯嗯 也是 谢谢哈
#4
小小小火柴2012-10-21 20:51
    楼主的代码好乱!最起码你的代码要有注释,你要给个提示用户输入的语句,还有输出语句你要给个提示吧!还有,你的思路是正确的,先判断是否是闰年,之后应该判断月份,月份大于2,应该再加一天。
#5
小小小火柴2012-10-21 21:28
# include <iostream>
using namespace std;

class srsj
{
public:
    void in()
    {
        int a,b,c;
        cout<<"请输入年,月,份:";
            cin>>a>>b>>c;
            if ((a%4==0 && a%100!=0) || a%400==0)  //判断是否闰年
            {
                if (b<2)
                    cout<<c;
                else if (b>=2&&b<=3)
                    cout<<(b-2)*28+31+c<<endl;
                else if (b>3&&b<=5)
                    cout<<(92+(b-4)*30+c)<<endl;
                else if (b>5&&b<=7)
                    cout<<(153+(b-6)*30+c)<<endl;
                else if (b==8)
                    cout<<(214+c)<<endl;
                else if (b>8&&b<=10)
                    cout<<(245+(b-9)*30+31)<<endl;
                else if (b>10&&b<=12)
                    cout<<(306+(b-11)*30+31)<<endl;
            }
            else
            {
                if (b<2)
                    cout<<c;
                else if (b>=2&&b<=3)
                    cout<<(b-2)*30+31+c<<endl;
                else if (b>3&&b<=5)
                    cout<<(92+(b-4)*30+c)<<endl;
                else if (b>5&&b<=7)
                    cout<<(153+(b-6)*30+c)<<endl;
                else if (b==8)
                    cout<<(214+c)<<endl;
                else if (b>8&&b<=10)
                    cout<<(245+(b-9)*30+31)<<endl;
                else if (b>10&&b<=12)
                    cout<<(306+(b-11)*30+31)<<endl;
            }
    }
};
void main()
{
    srsj s;
    s.in();
}
这样可以了!你的代码太麻烦,太乱了!楼主自己去简洁吧!我只是让你的程序可以运行!
#6
rjsp2012-10-22 09:49
随手瞎写的,你验证一下

程序代码:
#include <iostream>
using namespace std;

int main()
{
    unsigned year, month, day;
    cin >> year >> month >> day;

    static const unsigned a[] = { 0,31,59,90,120,151,181,212,243,273,304,334 };
    unsigned b = ( a[month-1]+day ) + ( month>2 && ((year%4==0&&year%100!=0)||year%400==0) );

    cout << b << endl;
    return 0;
}

#7
续写回忆2012-10-29 12:08
回复 5楼 小小小火柴
嗯嗯 非常感谢哈  
#8
续写回忆2012-10-29 12:09
回复 6楼 rjsp
嗯嗯 谢谢了哈
1