2022年第十三届蓝桥杯JAVA B组 试题 A: 星期计算

试题 A: 星期计算

本题总分:5 分
【问题描述】
已知今天是星期六,请问  天后是星期几?
注意用数字 1 到 7 表示星期一到星期日。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

答案:7

方法一:因为这里是结果填空题,我们直接暴力用java自带的BigInteger类。

这里BigInteger类的方法不熟悉的可以看B站跟光磊学Java-BigInteger和BigDecimal的使用_哔哩哔哩_bilibili

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

注意对于除法取模,我们不能直接分别取模了,详见可以搜索逆元。

  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值