`

解决大数值问题

    博客分类:
  • java
F# 
阅读更多
public class TestBigInteger {
public static void main(String[] args) {
BigInteger i = new BigInteger(1);
for (int n = 2; n <= 1000; n++) {
i.multiply(n);
  }
     System.out.println(i);
     System.out.println(i.toString().length());
  }
}

// 自定义的 BigInteger class BigInteger {
   // 初始化数组。每个元素可以包含 9 位数字,所以初始化有 90 位 
   private int ints[] = new int[10];
   // 达到或超过这个值就进位 
   private static final int UPPER_BOUND = 1000000000;
   public BigInteger(int value) {
   ints[0] = value;
  }
  public BigInteger(BigInteger value) {
  ints = Arrays.copyOf(value.ints, value.ints.length);
  }
  public void multiply(int n) {
  BigInteger that = new BigInteger(this);
  for (int i = 0; i < n - 1; i++) {
  add(that);
      }
}
  private void add(BigInteger bigInteger) {
  int[] ints2 = bigInteger.ints;
  for (int i = 0; i < ints2.length; i++) {
  ints[i] += ints2[i]; checkAndCarry(i);
     }
checkAndIncrease(); } // 检查指定位置的值。有必要的话就进位。 
private void checkAndCarry(int i) {
if (ints[i] >= UPPER_BOUND && i < ints.length - 1) {
ints[i] -= UPPER_BOUND; ints[i + 1]++;
}
   }
   // 检查最后一个元素的值。达到或超过进位大小则增加数组长度。 
   private void checkAndIncrease() { if (ints[ints.length - 1] > UPPER_BOUND) {
   int[] newints = Arrays.copyOf(ints, ints.length + 1);
   newints[ints.length - 1] -= UPPER_BOUND; newints[ints.length]++;
   ints = newints;
   }
}
@Override public String toString() {
DecimalFormat f = new DecimalFormat("000000000");
StringBuffer sb = new StringBuffer();
for (int each : ints) {
sb.insert(0, f.format(each));
}
while (sb.charAt(0) == '0') {
    sb.delete(0, 1);
}
   return sb.toString();
}
   }

分享到:
评论

相关推荐

    解决数值分析一类问题

    "4阶龙格库塔方法"和"常用求导微分方程"是数值分析中的核心工具,它们在解决实际问题时发挥着至关重要的作用。 4阶龙格库塔方法(Runge-Kutta 4th Order Method)是一种常微分方程初值问题的数值解法,由卡尔·龙格...

    润滑 数值计算方法 附带程序

    它的语法简洁,执行效率高,这使得它成为解决大型数值问题的理想选择。在“润滑数值计算方法”光盘中,每个子目录与章节对应,意味着这些程序是按照教材或论文的结构组织的,便于学习者按部就班地理解并运行代码。 ...

    东南大学数值上机作业_东南大学上机作业_

    东南大学的数值计算课程是计算机科学和技术、数学以及相关专业的重要组成部分,旨在培养学生解决实际问题的能力,尤其是通过数值方法处理复杂计算问题的能力。本上机作业集包含了学生刘鹏完成的一系列数值分析习题,...

    东南大学数值分析2011-2019年试题.zip

    数值分析是计算机科学与工程、数学、物理等多个领域的重要基础课程,它研究如何用数值方法解决实际问题,尤其是处理连续数学模型时的计算问题。东南大学作为国内知名高校,其数值分析课程的试题具有很高的学术价值和...

    哈尔滨工业大学数值分析作业答案

    数值分析是一门研究如何通过计算机来解决数学问题的学科,它涉及到了算法的设计、实现以及误差分析等多个方面。 ### 数值分析基本概念 数值分析主要关注于解决数学问题的实际方法,特别是那些可以通过计算机程序来...

    东北大学数值分析上机实验(有报告+代码)

    报告通常会详细介绍如何应用数值分析的理论知识解决实际问题,比如数值求解线性方程组、插值、拟合、微分方程等。通过阅读报告,学生可以了解实验过程中的思考和解决问题的方法,进一步加深对数值分析概念的理解。 ...

    重庆大学数值分析试卷

    【数值分析】是一门研究如何使用数值方法解决数学问题的学科,主要涉及微积分、线性代数和常微分方程等领域。本试卷考察了数值分析中的关键概念和技术,如误差分析、插值与拟合、求积公式、迭代法、线性方程组的解法...

    数值计算 期末综合大作业

    1、提出实际问题,也可从以下给定题目中选择(描述具体问题的内容和准备解决的方案)(20 分); 2、写出具体采用的数值计算方法的基本思想或原理(30 分); 3、上机实验的运行环境、程序代码、运行过程和运行...

    (答案)国科大数值分析2019-2020期末考核试题部分解答.pdf

    根据提供的文件信息,以下是对“国科大数值分析2019-2020期末考核试题部分解答”的知识点分析。 数值分析是一门应用数学的分支,主要研究...因此,解决数值分析的问题不仅仅是计算的过程,更是一个理解和创新的过程。

    数值分析上机题(matlab版)(东南大学).doc

    数值分析是指使用数值计算方法来近似解决数学问题的过程。在这个过程中,我们需要选择合适的算法和数据结构,以确保计算结果的准确性和效率。 在本资源中,我们将使用 MATLAB 来实现数值分析的计算。MATLAB 是一种...

    大学数值计算方法课件

    数值计算方法是计算机科学、工程学、物理学等多个领域不可或缺的工具,通过这门课程,学生能够学习如何用近似的方法解决复杂的数学问题。 首先,数值计算方法的核心在于解决不能或难以通过解析方式求解的问题。例如...

    东北大学数值分析课件

    数值分析是数学的一个分支,它涉及使用数值方法来解决数学问题,特别是在计算机上处理复杂数学模型时。东北大学的这门数值分析课件很可能包含了一系列关于这个主题的讲义、幻灯片、练习题和可能的解答,旨在帮助学生...

    研究生课件——数值分析(东南大学)

    《数值分析》是工科研究生阶段的一门重要课程,它主要研究如何用数值方法解决复杂的数学问题,尤其在科学计算和工程应用中占据核心地位。东南大学作为国内知名的高等学府,其数值分析课程有着严谨的学术体系和实践...

    中国石油大学(北京)数值分析作业答案

    数值分析是计算机科学和工程领域中的一个重要分支,它主要研究如何用近似方法解决实际问题中的数学问题。在中国石油大学(北京)的课程体系中,数值分析是理工科学生必修的一门课程,旨在培养学生的计算思维和解决...

    北航数值分析大作业2

    【数值分析大作业2】是北京航空航天大学一门课程——数值分析的实践环节,旨在通过解决具体问题,让学生深入理解和掌握数值方法的基本原理和应用。在这个作业中,学生将面临一个或多个与数值计算相关的挑战性问题,...

    西工大数值分析课件

    **数值分析**是一门研究如何使用计算机解决科学和工程领域中数学问题的学科。它不仅涉及算法的设计与实现,还包括了对算法效率和准确性的评估。西北工业大学提供的这份课件主要针对研究生考试复习而准备,覆盖了从第...

    数值计算大作业报告_数值计算报告_

    数值方法主要是通过近似算法来解决数学问题,尤其是在面对非线性问题或高维度问题时。 2. 常见的数值计算算法:报告可能详细介绍了几种常见的数值计算算法,如牛顿法、梯度下降法、欧拉方法、龙格-库塔方法等,这些...

    国科大数值分析部分作业解答

    数值分析是应用数学的一个分支,它涉及用数值方法解决数学问题,特别是那些涉及计算和非解析解的数学问题。在本篇作业解答中,涉及到的关键概念和技术包括泰勒展开、插值、微分、数值积分等。 首先,泰勒展开是一种...

Global site tag (gtag.js) - Google Analytics