分治求解幂次方(洛谷P1010题题解,Java语言描述)

题目要求

P1010题目链接
在这里插入图片描述
在这里插入图片描述

分析

我们分析一下x & 1的作用:
以八位二进制为例:
1 → 00000001
&是按位析取,所以,我们分析高位是0还是1,结果都是1,所以只看低位。
低位如果是1,即奇数,则结果为00000001,即1,即非0;
低位如果是0,即偶数,则结果为00000000,即0。

所以,得到结论是x & 1等价于x % 2,但速度更快一些。

再解读一下x >>= 1的作用:
>> 1指右移1位,由于是正数,所以高位必然补0,相当于x /= 2,即自除2。

本来是按照String写的,后来IJ建议我改成StringBuilder,然后就成了这个亚子,我也很苦涩啊~~

AC代码(Java语言描述)

import java.util.Scanner;

public class Main {
    private static String run(int x){
        StringBuilder s = new StringBuilder();
        if(x == 0) {
            return "0";
        }
        int i = 0;
        do {
            if((x & 1) != 0) {
                s.insert(0, ((i == 1) ? "2" : "2(" + run(i) + ")") + ("".equals(s.toString()) ? "" : "+"));
                //拼接字符串,应题意,要把低次方接在后面
            }
            i++;
            x >>= 1;
        } while(x != 0);//每次向右移位
        return s.toString();
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println(run(scanner.nextInt()));
        scanner.close();
    }
}

在这里插入图片描述

发布了364 篇原创文章 · 获赞 623 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_43896318/article/details/104081205