前言
“实战算法”是本专栏的第三个部分,本篇博文是第二篇博文,主要讲解迅雷笔试题——2的N次方——的解法,如有需要,可:
一、题目描述
对于一个整数N(512 <= N <= 1024),计算2的N次方并在屏幕显示十进制结果。
-
输入描述:
输入一个整数N(512 <= N <= 1024) -
输出描述:
2的N次方的十进制结果 -
样例输入
512
-
样例输出
13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096
二、代码实现
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int input = in.nextInt();
String result = "1";
for (int i = 0; i < input; i++)
result = multiplyByTwo(result);
System.out.println(result);
}
// 对当前数值(字符串)进行x 2的操作
public static String multiplyByTwo(String num){
char[] chars = num.toCharArray();
// 进位
int carry = 0;
for (int i = num.length() - 1; i >= 0; i--){
int tmp = (chars[i] - 48) * 2 + carry;
chars[i] = (char)(tmp % 10 + 48);
carry = tmp / 10;
}
if (carry != 0){
return String.valueOf(carry) + new String(chars);
} else {
return new String(chars);
}
}
}
三、代码说明
由于N的范围在[512, 1024]之间,指数的结果会非常大,整型和长整型都会溢出,职能使用字符串来表示。
代码分为两个方法,主方法中循环N次,multiplyByTwo
将当前的字符串表示的数值进行x 2
操作。
四、偷懒的方法
如果不怕出题人复查代码,可以使用BigInteger类,其中有相关的方法,一行即可解决:
return BigInteger.valueOf(2).pow(N).toString();
后记
本题主要考察控制台输入输出、字符串操作和作答者的细心(考虑进位等情况)