java 数组求阶乘_java求n的阶乘,用数组做

展开全部

import java.util.Scanner;

public class Test {

public static void printArr(int[] arr){

32313133353236313431303231363533e78988e69d8331333335306264for(int i=0;i

System.out.print(arr[i]);

}

public static void printArrRev(int[] arr){

for(int i=arr.length-1;i>=0;i--)

System.out.print(arr[i]);

}

public static int[] shift(int[] arr, int num){

int[] result = new int[arr.length+num];

for(int i=0;i

result[i+num] = arr[i];

}

return result;

}

public static int getDigit(int num){

int result = 0;

int number = num;

while(number!=0){

number = number/10;

result++;

}

return result;

}

//public static int[] isopsephy(int[] arr){

//int iso_number = 0;

//int[] result;

//for(int i=arr.length-1;i>=0;i--){

//iso_number = (arr[i]+iso_number)/10;

//}

//int digit = getDigit(iso_number);

//result = new int[arr.length+digit];

//for(int i=digit-1;i>=0;i--){

//result[i] = iso_number%10;

//iso_number = iso_number/10;

//}

//iso_number = 0;

//for(int i=arr.length-1;i>=0;i--){

//result[i+digit] = (arr[i]+iso_number)%10;

//iso_number = (arr[i]+iso_number)/10;

//}

//return result;

//}

//public static int[] isopsephy(int arr){

//int temp= arr;

//int[] result;

//int digit = getDigit(arr);

//result = new int[digit];

//for(int i=digit-1;i>=0;i--){

//result[i] = temp%10;

//temp = temp/10;

//}

//return result;

//}

public static int[] isopsephy(int[] arr){

int iso_number = 0;

int[] result;

for(int i=0;i

iso_number = (arr[i]+iso_number)/10;

}

int digit = getDigit(iso_number);

result = new int[arr.length+digit];

for(int i=0;i

result[i+arr.length] = iso_number%10;

iso_number = iso_number/10;

}

iso_number = 0;

for(int i=0;i

result[i] = (arr[i]+iso_number)%10;

iso_number = (arr[i]+iso_number)/10;

}

return result;

}

public static int[] isopsephy(int arr){

int temp= arr;

int[] result;

int digit = getDigit(arr);

result = new int[digit];

for(int i=0;i

result[i] = temp%10;

temp = temp/10;

}

return result;

}

public static int[] add(int[] arr, int[] addnum){

int[] arr_short = isopsephy(arr);

int[] arr_long = isopsephy(addnum);

if(arr_short.length>arr_long.length){

int[] temp;

temp = arr_short;

arr_short = arr_long;

arr_long = temp;

}

for(int i=0;i

arr_long[i] +=arr_short[i];

}

return isopsephy(arr_long);

}

public static int[] multi(int[] arr, int multiplier){

int[] result = new int[arr.length];

for(int i=0;i

result[i] = arr[i]*multiplier;

}

return isopsephy(result);

}

public static int[] getMult(int[] arr, int[] multipliers){

int[] result = new int[arr.length];

int[] first = isopsephy(arr);

int[] second = isopsephy(multipliers);

for(int i=0;i

result = add(result,shift(multi(first, second[i]),i));

result = isopsephy(result);

}

return result;

}

public static void main(String[] args){

Scanner sca = new Scanner(System.in);

System.out.println("Please input n:");

int n = sca.nextInt();

int[] result = isopsephy(n);

for(int i=n-1;i>0;i--){

result = getMult(result, isopsephy(i));

}

printArrRev(result);

}

}

一开始写成数组从高位到低位了,注释掉了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值