输入一个年份,判断是否为闰年,同时输入月份,判断是大月,小月还是平月、闰月。闰年的条件:year%400==0 || (year%4==0 && year%100!=0);
请问,大月,小月,平月,闰月的条件怎么判断??google不出来,郁闷中
请问,大月,小月,平月,闰月的条件怎么判断??google不出来,郁闷中
解决方案 »
- java socket服务端如何检查客户端是处于输入还是输出?
- JSP新手,刚写了个留言板。大家请来鼓励我!(顺便讨论下杭州程序员的问题!)
- java的数字签名为何如此烂
- java区域显示
- 请问document doc是什么?
- 这一段代码把我机器资源耗尽.
- 当定义好了Class名后,我要再更改的话,如何去更改??内详。。。
- scjp求助,这道题应该选什么,以及原因,谢谢
- hibernate翻转生成POJO问题
- 请解释一下接口与抽象!
- getInputSteam的问题
- 各位高手,哪个清楚InputStream的public int read(byte[] b,int off,int len)的用法
case 1,3,5,7,8,10,12
大月
case 4,6,9,11
平月
就是这样,这个大月、小月又没有什么数学规律,只能这样判断了另外,google也好、csdn也好,作为辅助的帮手可以,但不能过于依赖这些,还是要学会自己思考
小月就是:4,6,9,11
至于平月,闰月是2月根据平年润年而来的!switch(month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
puts("大月");
break;
case 4:
case 6:
case 9:
case 11:
puts("小月");
break;
case 2:
if(year%400==0 || (year%4==0 && year%100!=0))
puts("润月");
else
puts("平月");
break;
defualt:
puts("月份数据错误!");
}
小月是:4,6,9,11
至于平月,闰月好像只有农历里讲平月或者润月,只有闰年里才有闰月(只有一个月为润月,其他为平月),平年里就就没有闰月。我个人是这么理解的!switch(month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
puts("大月");
break;
case 4:
case 6:
case 9:
case 11:
puts("小月");
break;
case 2:
if(year%400==0 || (year%4==0 && year%100!=0))
puts("28;
else
puts("29")
break;
defualt:
puts("月份数据错误!");
}
[/Quote]
import java.util.*;public class Year {
public static void main(String[] args) {
/**
* 输入年,月
*/
Scanner input = new Scanner(System.in);
System.out.print("请输入年份:");
int year = input.nextInt();
System.out.print("请输入月份:");
int month = input.nextInt(); /**
* 判断润年
*/
boolean run;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
run = true;
System.out.println(year + "年是润年");
} else {
run = false;
System.out.println(year + "年是平年");
} /**
* 计算整年天数(1900年1月1日至输入年-1年)
*/
int tDays = 0;
for (int i = 1900; i < year; i++) {
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
tDays += 366;
else
tDays += 365;
} /**
* 计算本年本月之前天数
*/
int days = 0, mDays = 0;
for (int i = 1; i <= month; i++) {
switch (i) {
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if (run)
days = 29;
else
days = 28;
break;
default:
days = 31;
}
if (i < month)
mDays += days;
} /**
* 计算总天数(1900年1月1日至输入年月前)
*/
tDays += mDays; /**
* 判断输入月启始周数
*/
int fDays, weeke = tDays % 7 + 1;
if (weeke == 7)
fDays = 0;
else
fDays = weeke; /**
* 打印输出
*/
System.out.println(month + "月有" + days + "天");
System.out.println("\n*******************" + year + "年" + month
+ "月日历*********************");
System.out.println("");
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
int i;
for (i = 0; i < fDays; i++)
System.out.print("\t");
for (i = 1; i <= days; i++) {
System.out.print(i + "\t");
if ((tDays + i - 1) % 7 == 5)
System.out.print("\n");
}
System.out.println("\n");
System.out
.println("******************************************************");
}
}输入年份,月份,就可以打印当月的日历
判断好了闰年或平年,从键盘输出一个月份,又怎样判断这个月份是不是闰月?还是搞不懂
测试代码如下:
import java.io.*;
public class Lamp {
public static void main(String[] args){
for(int m=1; m<=12;m++){
if(((m&1)^(m>>3&1))==1){
System.out.println(m+"是大月");
}else{
System.out.println(m+"是小月");
}
}
}
}
结果如下:
F:\java>java Lamp
1是大月
2是小月
3是大月
4是小月
5是大月
6是小月
7是大月
8是大月
9是小月
10是大月
11是小月
12是大月
2: 0010
3: 0011
4: 0100
5: 0101
6: 0110
7: 0111
8: 1000
9: 1001
10:1010
11:1011
12:1100m&1是把m的最低的一位取出来
m>>3相当于m/8.
整个表达式的意思是把m的最低的一位和最低的第4位取出来,再异或.异或的运算规律是异则为真,也就是不同的两个二进制位相异或,值为1.我们知道,奇数的最低位是1.
判断一个月是大月:小于8时,是奇数;或大于8时,不是奇数.
小于8的奇数,m>>3&1是0,则:(m&1)^(m>>3&1)==>1^0是1.
大于8的非奇数:m>>3&1为1,则(m&1)^(m>>3&1)==0^1是1.
16楼才强大
String xx(int year, int month){
String r=null;
boolean isR=isR(year); //判断闰年
int m[] = {1, 0, 1 , 0, 1, 0 , 1, 1, 0, 1, 0, 1};
if(month==2)
r = isR ? "闰月" : "平月";
else
r = m[month]==0 ? "小月" : "大月";
return r;
}