栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

标准输入让用户输入任意整数n,计算11+22+…nn,要求使用本章知识,提示:结果超出了长整数long的范围,不允许使用Java大数处理类。

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

标准输入让用户输入任意整数n,计算11+22+…nn,要求使用本章知识,提示:结果超出了长整数long的范围,不允许使用Java大数处理类。

标准输入让用户输入任意整数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;
        }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/397132.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号