此程序应打印2 ^ n的最后3位数字(如果数字小于3,则打印所有数字)。
当n <30时,它可以正常工作,但在30之后程序会给我否定答案。
如何让它发挥作用?
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.WeekFields;
public class USWeek {
public static final WeekFields US_WEEK_FIELDS = WeekFields.of(DayOfWeek.SUNDAY, 4);
// equivalent to: public static final WeekFields US_WEEK_FIELDS = WeekFields.SUNDAY_START;
// equivalent to: public static final WeekFields US_WEEK_FIELDS = WeekFields.of(Locale.US);
public static int getWeek(LocalDate date) {
return date.get(US_WEEK_FIELDS.weekOfWeekBasedYear());
}
public static int getYear(LocalDate date) {
return date.get(US_WEEK_FIELDS.weekBasedYear());
}
}
答案 0 :(得分:3)
你不需要任何更大的类型,我怀疑你最近已经了解了模数运算符%
。
N
的后三位是N % 1000
。
如果X
是2 n 的最后三位数,则2 n + 1 的最后三位数是{{1>的最后三位数字}}
2 * X
答案 1 :(得分:1)
int
(通常)是32位长度,但是由于在有符号整数中如何解释位,实际范围是[-2 31 ,2 31 - 1]。你正在溢出变量,因此得到意想不到的结果。根据应用程序(n
的最大值),使用64位无符号整数(unsigned long long
,如果n
小于64)或考虑查找大数字的特定库。