黑马程序员技术交流社区
标题: 求闰年的算法 [打印本页]
作者: springD 时间: 2015-11-24 13:32
标题: 求闰年的算法
本帖最后由 springD 于 2015-11-24 13:39 编辑
输入一个年份求闰年,我自己的思路和谭浩强老师C语言课本的思路不太一样,但我觉得我的思路也是对的,请大家指点。我的思路:
课本思路:
我的code:
#include <stdio.h>
int main()
{
int year;
printf("请输入一个年份\n");
scanf("%d",&year);
//能被400整除的年份为闰年
if(year%400==0)
printf("%d 是闰年\n ",year);
else
{
if(year%100!=0)
{
//不能被400整除,不能被100整除,但能被4整除的年份为闰年
if(year%4==0)
printf("%d 是闰年\n",year);
//不能被400整除,不能被100整除,也不能被4整除的年份不是闰年
else
printf("%d 不是闰年\n",year);
}
//不能被400整除,能被100
else
printf("%d 不是闰年\n",year);
}
}
谭老师code:
#include <stdio.h>
int main()
{
// 利用if(1)恒真,f(0)恒假,因此定义一个value
int year,value;
printf("请输入一个年份\n");
scanf("%d",&year);
//不能被4整除的年份不是闰年
if(year%4!=0)
value = 0;
else
{
//能被4整除,不能被100整除的年份是闰年
if(year%100!=0)
value = 1;
else
{
//能被4整除,能被100整除,能被400整除的年份是闰年
if(year%400==0)
value = 1;
//能被4整除,能被100整除,不能被400整除的年份不是闰年
else
value = 0;
}
}
//value=1为真,value=0为假
if(value)
//为便于显示,此处不加"\n"
printf("%d是",year);
else
printf("%d不是",year);
//接上一部分输出
printf("闰年");
}
请问我的算法是否正确,我运行起来没有问题。
作者: l5681065 时间: 2015-11-24 17:23
代码倒是没问题
但是 if(year%400==0) 你这句话的右括号是中文的有括号..........
作者: 马尔代夫的日出 时间: 2015-11-24 22:07
不错!!!!!!!!!!!!!!!!!
作者: IT-capfer 时间: 2015-11-25 01:32
我来敲个代码,可以循环执行。
#include <stdio.h>
int main()
{ int year; while(1)
{ printf("请输入一个年份\n");
} scanf("%d",&year); if(0==year%400){ printf("%d 是闰年\n ",year);
} else if(0!=year%100&&0==year%4)
{ printf("%d 是闰年\n ",year);
} else
{ printf("%d 不是闰年\n",year);
}
} return 0;
}
作者: liury 时间: 2015-11-25 12:55
1.通常情况下
课本思路: 被4整除 -> 不被100整除 结束
你的思路 不被400整除 -> 不被100整除 -> 被4整除 结束
你过于关注特例 被400整除的情况了。
- #include <stdio.h>
- int y_4,y_100,y_400;
- int t_4,t_100,t_400;
- int main()
- {
- //楼主思路
- for(int i=1;i<=400;i++)
- {
- y_400++;
- // 被400整除,闰年 结束本轮循环
- if( i % 400 != 0)
- {
- y_100++;
- //被100整除,非闰年 结束本轮循环
- if(i % 100 != 0)
- {
- y_4++;
- if( i % 4 ==0)
- {
- }
- }
- }
- }
- //课本思路
- for(int i = 1;i<= 400;i++)
- {
- t_4++;
- //不能被4整除,非闰年,结束本轮循环
- if( i % 4 == 0)
- {
- t_100++;
- // 被4整除,不被100整除,闰年,结束本轮
- if(i % 100 == 0)
- {
- t_400++;
- if(i % 400 == 0)
- {
- }
- }
- }
- }
- printf("y_4 = %d , y_100 = %d, y_400 = %d\n",y_4,y_100,y_400);
- printf("t_4 = %d , t_100 = %d, t_400 = %d\n",t_4,t_100,t_400);
- }
复制代码
打印结果:
y_4 = 396 , y_100 = 399, y_400 = 400
t_4 = 400 , t_100 = 100, t_400 = 4
作者: langjun 时间: 2015-11-28 20:20
我感觉效率不高。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |