问题描述
- 大一新生妹子求救:求2的100万次方
-
求2的100万次方的值,不能使用java中的系统函数,这两天急用,关乎到进项目组锻炼的机会,谢谢大家了。
解决方案
试下这个吧,。要跑很久
import java.util.ArrayList;
public class Test {
public static ArrayList<Integer> doubleIt(ArrayList<Integer> a){
int addto=0;
for(int i=0;i<a.size();i++){
int left=(a.get(i)*2+addto)%10;
addto=(a.get(i)*2+addto)/10;
a.set(i, left);
if(i==a.size()-1&&addto!=0){
a.add(addto);
break;
}
}
return a;
}
public static void main(String[] args){
ArrayList<Integer> a=new ArrayList<Integer>();
a.add(8);
doubleIt(a);
for(int i=1;i<999997;i++){
a=doubleIt(a);
}
for(int i=a.size()-1;i>=0;i--){
System.out.print(a.get(i));
}
}
}
解决方案二:
运用递归,递归方程式:
a^n=a^(n/2)*a^(n/2) 当n为偶数
=a^(n/2)*a^(n/2)*a 当n为奇数
如果不明白,明天我可以把代码发给你!
解决方案三:
要等很久
import java.util.ArrayList;
public class Test {
public static ArrayList<Integer> doubleIt(ArrayList<Integer> a){
for(int i=a.size()-1;i>=0;i--){
int addto=a.get(i)*2/10;
int left=a.get(i)*2%10;
a.set(i, left);
if(addto==0){
continue;
}
if(i==a.size()-1){
a.add(addto);
}else{
a.set(i+1, a.get(i+1)+addto);
}
}
return a;
}
public static void main(String[] args){
ArrayList<Integer> a=new ArrayList<Integer>();
a.add(2);
doubleIt(a);
for(int i=1;i<99999;i++){
a=doubleIt(a);
}
for(int i=a.size()-1;i>=0;i--){
System.out.print(a.get(i));
}
}
}
解决方案四:
这个问题最大的难点是输出的数据类型不能是int,float,long,double等基本类型
解决方案五:
用bigint类型来存储数据
解决方案七:
package face.test;
import java.util.Scanner;
public class BigNumber {
public static void main(String[] args) throws Exception {
int[] date = new int[10000];
date[1] = 1;
int weishu = 1; // 求出来的值的位数
System.out.println("求2的n次方的值");
System.out.print("n=");
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= weishu; j++) {
date[j] = date[j] * 2;
}
// 确保除最高位外的每位不大于9
for (int j = 1; j < weishu; j++) {
if (date[j] >= 10) {
date[j + 1] += date[j] / 10;
date[j] = date[j] % 10;
}
}
// 确保最高位不大于9
while (date[weishu] >= 10) {
weishu++;
date[weishu] += date[weishu - 1] / 10;
date[weishu - 1] = date[weishu - 1] % 10;
}
}
System.out.print("2的" + n + "次方= ");
for (int k = weishu; k >= 1; k--) {
System.out.print(date[k]);
}
System.out.println("");
}
}
求2的n次方的值
n=100
2的100次方= 1267650600228229401496703205376
解决方案八:
用一个大数据处理库就能算出来,然后直接以常量形式写到项目中就行了
解决方案九:
如果是C++的话,应该是个大数问题,我一般面对这种问题要用数组,不过一般要算很久的...
——我是可爱的小尾巴 [url=http://blog.tk-xiong.com/]http://blog.tk-xiong.com/[/url]
解决方案十:
这个问题 主要从2 上入手 2进制嘛 1后边100万个0 然后转16进制 8进制 都很方便的
时间: 2025-01-19 15:48:49