当n> 30时得到错误的结果

时间:2017-02-15 09:25:22

标签: c++

此程序应打印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());
    }
}

2 个答案:

答案 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)或考虑查找大数字的特定库。