1009——精确计算2的N次方

题目:100<=N<=1000,输入N,输出2^N的精确值
示例:
输入:200
输出:1606938044258990275541962092341162602522202993782792835301376

import java.util.Scanner;

public class Main {

    int n;
    int[] regs = new int[1000];

    public static void main(String[] args) {
        Main obj = new Main();
        obj.getInput();
        obj.checkInput(obj.n);
        obj.computeNPowerOf2(obj.n);
        obj.printNPowerOf2();
    }

    public void getInput() {
        Scanner input = new Scanner(System.in);
        n = input.nextInt();
        input.close();
    }

    public void checkInput(int input) {
        if (input < 100 || input > 1000) {
            System.exit(1);
        }
    }

    public void computeNPowerOf2(int n) {
        final int TWO = 2;
        final int TEN = 10;

        regs[0] = TWO;
        int highestIdx = 0;

        for (int times = 1; times < n; times++) {

            int carry = 0;
            for (int idx = 0; idx <= highestIdx; idx++) {
                regs[idx] = regs[idx] * TWO + carry;

                if (regs[idx] >= TEN) {
                    regs[idx] -= TEN;
                    carry = 1;
                    if (highestIdx == idx) {
                        highestIdx++;
                    }
                } else {
                    carry = 0;
                }
            }

        }
    }

    public void printNPowerOf2() {
        int start = skipUntilNonZero();
        for (int i = start; i >= 0; i--) {
            System.out.print(regs[i]);
        }
        System.out.println();
    }

    public int skipUntilNonZero() {
        int i = regs.length - 1;
        while (regs[i] == 0 && i >= 0) {
            i--;
        }
        return i;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值