使用BigInteger大容量運算類計算100的階乘
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:空間域名、雅安服務器托管、營銷軟件、網站建設、錯那網站維護、網站推廣。
一.一般算法(循環)
view plaincopy to clipboardprint?
public class Test {
public static void main(String[] args) {
int result = 1;
for (int i = 1; i = 100; i++) {
result *= i;
}
System.out.println(result);
}
}
public class Test {
public static void main(String[] args) {
int result = 1;
for (int i = 1; i = 100; i++) {
result *= i;
}
System.out.println(result);
}
}
輸出結果為0,因為int無法保存下100的階乘的結果,100的階乘的長度至少大于50位,也要大于long,double
二.使用BigInteger大容量運算類
view plaincopy to clipboardprint?
import java.math.BigInteger;
public class Test {
public static void main(String[] args) {
BigInteger result = new BigInteger("1");//為result賦初始值,為1
for (int i = 1; i = 100; i++) {
BigInteger num = new BigInteger(String.valueOf(i));
result = result.multiply(num);//調用自乘方法
}
System.out.println(result);//輸出結果
System.out.println(String.valueOf(result).length());//輸出長度
}
}
import java.math.BigInteger;
public class Test {
public static void main(String[] args) {
BigInteger result = new BigInteger("1");//為result賦初始值,為1
for (int i = 1; i = 100; i++) {
BigInteger num = new BigInteger(String.valueOf(i));
result = result.multiply(num);//調用自乘方法
}
System.out.println(result);//輸出結果
System.out.println(String.valueOf(result).length());//輸出長度
}
}
計算結果為:93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
產度:158
java中可以用for循環來實現階層。
代碼如下:
public class Demo {
public static void main(String[] args) {
for(int i=1;i5;i++){
int sum = 1;//定義一個用來存儲階層的值
for(int j=1;j=i;j++){//實現階層的循環
sum *= j;
}
System.out.println(i+"的階層是:"+sum);
}
}
}
for循環中的變量從1開始,循環遍歷到階層本身的這個數,通過一個變量來記錄上一個數的乘積即可。
按照你的要求編寫的n的階乘的Java程序如下
public class Factorial{
public int foo(int x){
if(x==0 || x==1){
return 1;
}else{
return x*foo(x-1);
}
}
public static void main(String[] args){
int n=6;
Factorial f=new Factorial();
System.out.println(f.foo(n));
}
}
import java.util.Scanner;
public class A{
//下面的方法是對單個數求階乘,并返回
public static int jieCheng(int n){
int sum=1;
for(int i=1;i=n;i++){
sum*=i;
}
return sum;
}
//下面是對所有數求階乘,再全部相加,并返回
public static int add(int n){
int sum=0;
for(int i=1;i=n;i++){
sum+=jieCheng(i); //調用上面的方法,對單個求階乘,再全部相加
}
return sum;
}
public static void main(String[] args){
Scanner input=new Scanner(System.in);
System.out.println("請輸入數字:");
int n=input.nextInt();
System.out.println("運算得到:"+add(n));
}
}
//總結:此題有個特點,n等于要相加的數字的總數,也等于要求階乘的最大數