标准输入让用户输入任意整数n,计算11+22+…nn,要求使用本章知识,提示:结果超出了长整数long的范围,不允许使用Java大数处理类。
import java.util.ArrayList;
import java.util.linkedList;
import java.util.Scanner;
import static java.lang.Math.pow;
public class Main4 {
public static void main(String[] args) {
int[] a = new int[10000];
int[] b = new int[10000];
int[][] c = new int[10000][10000];
int[] sum = new int[10000];
int len1 = 2, len2 = 2, n = 4,len=0;
int w = 100;//位数
Scanner sc = new Scanner(System.in);
n=sc.nextInt();
for (int i = 1; i < n + 1; i++) {
w=i;
len1 = len2 = String.valueOf(w).length();
for (int j = 0; j < len1; j++) {
a[j]=b[j]=w%10;
w=w/10;
}
c = POW(a, b, len1, len2, i);//求n的n次方
len=len>c[1][0]?len:c[1][0];
for (int j = 0; j < c[1][0]; j++) {
sum[j]=sum[j]+c[0][j];
if(sum[j]>=10){
sum[j+1]=sum[j]/10+sum[j+1];
sum[j]=sum[j]%10;
}
}
if(sum[len]!=0){//相加是否进位
len=len+1;
}
}
for (int i = len-1; i >= 0; i--) {
System.out.print(sum[i]);
}
}
public static int[][] POW ( int a[], int b[], int len1, int len2, int n){
int[] c = new int[10000];
int[][] d = new int[2][10000];
for (int k = 1; k < n; k++) {//用数组做乘法
for (int i = 0; i < len1; i++) {
for (int j = 0; j < len2; j++) {
c[i + j] = c[i + j] + a[i] * b[j];
}
}
for (int i = 0; i < (len1 + len2); i++) {
if (c[i] >= 10) {
c[i + 1] = c[i + 1] + c[i] / 10;
c[i] = c[i] % 10;
}
}
if (c[len1 + len2 - 1] == 0) {
len1 = len1 + len2 - 1;
} else {
len1 = len1 + len2;
}
for (int i = 0; i < len1; i++) {
a[i] = c[i];
c[i] = 0;
}
}
d[1][0] = len1;
for (int i = 0; i < len1; i++) {
d[0][i] = a[i];
}
return d;
}
}



