赞
踩
试题 A: 星期计算
本题总分:5 分
【问题描述】
已知今天是星期六,请问 天后是星期几?
注意用数字 1 到 7 表示星期一到星期日。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
答案:7
- package lanqiao13;
- import java.math.BigInteger;
- /**
- * 杨亚磊
- * 试题 A: 星期计算
- *
- * 本题总分:5 分
- * 【问题描述】
- * 已知今天是星期六,请问20的22次方天后是星期几?
- * 注意用数字 1 到 7 表示星期一到星期日。
- * 【答案提交】
- * 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
- * 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
- * 答案:7
- */
- public class A {
- public static void main(String[] args) {
- //因为是结果填空题,不需要考虑运行时间,直接用BigInteger类
-
- //这里BigInteger的构造方法只允许传字符串
- BigInteger bi = new BigInteger("20");
- //20的22次的计算结果
- BigInteger res = new BigInteger("1");
- for(int i = 0;i < 22;i++) { //乘以22次
- //BigInteger是一个类 加减乘除和取模等运算是调用BigInteger的方法
- res = res.multiply(bi);
- //这里确保答案准确可一将每次*20后的结果输出
- System.out.println(i+1 + "次方的结果: "+res.toString());
-
- }
- System.out.println("==================");
- System.out.println(res.toString());
- System.out.println("==================");
- BigInteger mo = new BigInteger("7");
- //一周7天 将res%7
- res = res.remainder(mo);
- //计算出是1 然后在周六的基础上+1 这道题的答案就是7
- System.out.println(res.toString());
- }
- }

即:一般取模方式: 乘积后%取模
防止溢出: (ab)%p = ((a%p)(b%p))%p
对应这道题就是 ( (20%7)* (20%7)* (20%7)*... (20%7)* (20%7) ) % 7 = (6*6*6*...6*6)%7
转化为6的22次方模7 -->在将6*6=36看作公式的a
可得( (36%7)* (36%7)* (36%7)*... (36%7)* (36%7) ) % 7 = 1的11次方模7 最终就是 1
然后在周六的基础上+1 这道题的答案就是7
(a + b) % p = (a%p + b%p) %p
(a - b) % p = ((a%p - b%p) + p) %p
(a * b) % p = (a%p)*(b%p) %p
注意对于除法取模,我们不能直接分别取模了,详见可以搜索逆元。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。