这段代码的思想主要是:
首先将输入的数(m)按字符拆分放到数组中,并对数组进行反转排序使得数位较高的数排在下标较大的空间里,然后进行分别计算该数组中每一个元素与m-1的乘积并将结果一一保存在一个新数组中,然后将该数组传到进位算法中进行进位排列计算,进位算法又将结果返回给原方法,重新开始新一轮的乘积计算,最终得出结果.
例如:
输入的数:n=10;
排序
int a[] = {1,0}=>b={0,1};
进位
b>{0x9,1x9}=>{0,9}
a = {0,9}=>{0x8,9x8}===>{0,72};
======>{0,2,7}…
进位
上代码:
package com.test;
import java.awt.image.ConvolveOp;
import java.util.Arrays;
import java.util.Date;
import java.util.Scanner;
public class Test {
public char[] getNum() {
System.out.println("请输入一个大于1的数");
Scanner i = new Scanner(System.in);
Integer n = i.nextInt();
if(n<=1) {
System.out.println("您输入的数太小");
return null;
}
char arr1[] = new char[n.toString().length()];
for(int j =arr1.length-1;j>=0;j--) {
arr1[j] = n.toString().charAt(j);
}
char temp[] = new char[arr1.length];;
for(int x=0;x<arr1.length;x++){
temp[x] = arr1[arr1.length-x-1];
}
for(int m = n;m>0;m--) {
int len = temp.length;
int temp1[] = new int[len];
for(Integer x = 0;x<len;x++) {
if(m==1) {
return temp;
}
temp1[x] = (temp[x]-'0')*(m-1);
}
// for (int q = 0; q< temp1.length / 2; q++) {
// //进行数组互换
// int sum = temp1[q];
// temp1[q] = temp1[temp1.length - 1 - q];
// temp1[temp1.length - 1 - q] = sum;
// }
// int arr1[] = temp1;;
// if() {
// for(int x=0;x<temp1.length;x++){
// arr1[x] = temp1[temp1.length-x-1];
// }
// }
char tempx[] = this.getjin(temp1);
temp = tempx;
}
return temp;
}
public char[] getjin(int temp[]) {
int index = temp.length-1;
for(int i=0;i<=index;i++) {
if(temp[i]/10>=1) {
if(i==index) {
int next = temp[i]/10;
int newtemp[] = new int[i+2];
newtemp[i] = temp[i]%10;
newtemp[i+1] = temp[i]/10;
System.arraycopy(temp, 0, newtemp, 0, i);
temp = new int[newtemp.length];
temp = newtemp;
index++;
}else{
temp[i+1] = temp[i]/10+temp[i+1];
temp[i] = temp[i]%10;
}
}else {
temp[i]=temp[i];
}
// if(temp[temp.length]>=10) {
// getjin(temp);
// }
}
char arr1[] = new char[temp.length];
for(int z = temp.length-1; z>=0;z--) {
arr1[z] = Character.forDigit(temp[z],10);
}
return arr1;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("-----开始计算-----");
long startTime = System.currentTimeMillis();
Test test = new Test();
char arr[] = test.getNum();
System.out.println("阶乘的结果为:");
for(int i = arr.length-1;i>=0;i--) {
System.out.print(arr[i]);
}
System.out.println("\n");
System.out.println("结果的总长度为:"+arr.length);
long endTime = System.currentTimeMillis();
System.out.println("所用时间:"+(endTime-startTime)/1000+"s");
System.out.println("-----结束-----");
}
}
运行结果:
喜欢的点个关注吧O(∩_∩)O