12:计算2的N次方

一、题目链接

http://noi.openjudge.cn/ch0106/12/

二、解题思路

◎ 根据题意,乘2的次数为n次;
◎ 从低位到高位,用当前结果的每一位数字乘2,同时加上上一次的进位,形成新的计算结果。

三、实施步骤

四、Java程序

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    /**
     * 计算2的给定次方
     *
     * @param n int类型的整数,代表给定次方
     * @return int类型的数组,存储2的n次方
     */
    public int[] powerOfTwo(int n) {
        int[] ans = new int[50]; // 存储2的n次方
        ans[0] = 1; // 计算基数为1
        int m = 1; // 计算结果的实际长度,初始为1
        int carry; // 每次运算产生的进位
        int i;
        int j;
        /* 乘2的次数为n次 */
        for (i = 1; i <= n; i++) {
            carry = 0; // 当前进位,初始为0
            /* 从当前结果的最低位开始,每个数位都要和2相乘 */
            for (j = 0; j < m; j++) {
                ans[j] = ans[j] * 2 + carry; // 当前数位乘2,同时加上上一次的进位
                if (ans[j] > 9) { // 如果当前数位计算结果超过9
                    carry = ans[j] / 10; // 当前数位的十位数构成进位
                    ans[j] = ans[j] % 10; // 当前数位仅保留个位数
                }
                else { // 否则,当前数位计算结果为个位数
                    carry = 0; // 进位为0
                }
            }
            if (carry > 0) { // 如果本次乘2运算产生更高一位的进位
                ans[m] = carry; // 最高位数字就是当前的进位
                m++; // 结果实际长度加1
            }
        }
        /* 计算结果中,小的下标代表低的位数,因此需要返回结果的倒序 */
        for (i = 0; i < m / 2; i++) {
            j = ans[i];
            ans[i] = ans[m - i - 1];
            ans[m - i - 1] = j;
        }
        return Arrays.copyOfRange(ans, 0, m); // ans[0]~ans[m-1]构成最终计算结果
    }

    public static void main(String[] args) {
        Main test = new Main();
        Scanner input = new Scanner(System.in);
        int N = input.nextInt();
        int[] ans = test.powerOfTwo(N);
        for (int i : ans) {
            System.out.print(i);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江苏科技大学_计算机学院_潘磊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值