`
emowuyi
  • 浏览: 1481684 次
文章分类
社区版块
存档分类
最新评论

用数组表示巨大的数

 
阅读更多

/**

*

*/

package homeWork;

import javax.swing.JOptionPane;

/**

* @author Administrator

*

*/

public class HugeInteger {//表示类

private int array[] = new int[40];

private boolean signed = false;//符号

public HugeInteger() {

for (int i = 0; i < array.length; i++) {

array[i] = 0;

}

}

public HugeInteger(int[] setArray) {

for (int i = 0; i < setArray.length; i++) {

array[i] = setArray[i];

}

}

public void input() {

String Int;

char charArray[] = new char[array.length];

StringBuffer buffer;

for (int i = 0; i < charArray.length; i++) {

charArray[i] = '0';

}

Int = JOptionPane.showInputDialog("Please input the HugeInteger:");

buffer = new StringBuffer(Int);

buffer.reverse();// 倒序,调整高位

buffer.getChars(0, buffer.length(), charArray, 0);

for (int i = 0; i < charArray.length; i++) {

array[i] = charArray[i] - 48;// 把char转换成int

}

}

public String output() {

String outputString = "";

boolean type = false;//用于标记高位的0

// outputString += "The HugeInteger is: ";

if (signed)

outputString += "-";

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

if (array[i] != 0) {

outputString += array[i];

type = true;

} else if (type)

outputString += array[i];// 不输出高位的0

}

return outputString;

}

public HugeInteger add(HugeInteger huge) {

int TempArray[] = new int[40];

int n = 0;

for (int i = 0; i < array.length; i++) {

n = array[i] + huge.array[i] + TempArray[i];

if (n >= 10) {

TempArray[i + 1] += 1;// 进位

n = n - 10;

}

TempArray[i] = n;

}

return new HugeInteger(TempArray);

}

public HugeInteger sbstact(HugeInteger huge) {

int result[] = new int[40];

if (isGreaterThan(huge))

for (int i = 0; i < array.length; i++) {

if (array[i] < huge.array[i] && i < array.length - 1) {

array[i + 1]--;

array[i] += 10;

}

result[i] = array[i] - huge.array[i];

}

else {

signed = true;

for (int i = 0; i < array.length; i++) {

if (array[i] > huge.array[i] && i < array.length - 1) {

huge.array[i + 1]--;

huge.array[i] += 10;

}

result[i] = huge.array[i] - array[i];

}

}

return new HugeInteger(result);

}

public boolean isGreaterThan(HugeInteger huge) {

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

if (array[i] < huge.array[i])

return false;

}

return true;

}

public boolean isEqualTo(HugeInteger huge) {

for (int i = 0; i < array.length; i++) {

if (array[i] != huge.array[i])

return false;

}

return true;

}

public boolean isZero() {

for (int i = 0; i < array.length; i++) {

if (array[i] != 0)

return false;

}

return true;

}

}

/**
*
*/
package homeWork;
import javax.swing.JOptionPane;
/**
* @author Administrator
*
*/
public class HugeIntegerTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HugeInteger hugeInteger1 = new HugeInteger();
HugeInteger hugeInteger2 = new HugeInteger();
HugeInteger resultHugeInteger = new HugeInteger();
String output = "";
hugeInteger1.input();
hugeInteger2.input();
output += "hugeInteger1 is: " + hugeInteger1.output()
+ "/nhugeInteger2 is: " + hugeInteger2.output();
resultHugeInteger = hugeInteger1.add(hugeInteger2);
output += "/nhugeInteger1 + hugeInteger2 = "
+ resultHugeInteger.output();
resultHugeInteger = hugeInteger1.sbstact(hugeInteger2);
output += "/nhugeInteger1 - hugeInteger2 = ";
if (!hugeInteger1.isGreaterThan(hugeInteger2))
output += "-";
output += resultHugeInteger.output();
JOptionPane.showMessageDialog(null, output, "HugeInteger Test",
JOptionPane.INFORMATION_MESSAGE);
}
}
分享到:
评论

相关推荐

    python代码,需要数组1为1到36中随机选取5个数,需要数组2为1到12随机2个数,然后组合两个数组

    我们使用Python的random模块生成了两个随机数组,分别是1到36中随机选取的5个数和1到12中随机选取的2个数。然后,我们使用加号运算符将这两个数组组合成一个新的数组,并输出结果。 需要注意的是,我们使用了random...

    全局变量+递归+动态开辟+纯数组回文数.c

    那么就是说如果单纯的用一个数字表示回文数,那就只能表示出有限的回文数,如果数字过大就会超出表示范围,在这么我采用了动态开辟加数组的形式表示回文数,使得需要输出的回文数不会超出整型数据的表示范围。...

    matlab字符串数组

    您可以使用字符串数组表示中的文本。字符串数组的每个元素存储一个字符序列。序列可以具有不同长度,无需填充,例如 "yes" 和 "no"。只有一个元素的字符串数组也称为字符串标量。 您可以按照标准数组运算对字符串...

    VBA 数组进阶——进阶即为探寻细节,“实践出真知”。

    注意,在定义动态数组之后,必须使用ReDim 语句来设置动态数组的维数、上界和下界,为数组重新 分配存储空间。否则,将出现运行错误,提示下标越界。 Sub test() Dim arrTemp(5) As Integer Stop End Sub ......

    求二维数组最大和的子数组

    给定一个二维数组,由其中若干邻近元素构成的矩形称为子数组,请编写程序计算...接下来的N*N个数被空格和换行符隔开,表示按照行优先顺序的数组元素。 【输出数据】最大的子数组元素之和,并输出该子数组的所有元素。

    python [:3] 实现提取数组中的数

    搜索答案搜索不到,自己试了一把. 首先生成一维数组 a =np.array([1,2,3,4,5,6,7,8,9]) &gt;&gt;&gt; print a [1 2 3 4 5 6 7 8 9] ...所以-号表示方向,从前取还是从后取,与数字配合使用,:表示所有的意思. 对

    数组的定义,初始化和使用,C语言数组详解.pdf

    c语言数组 数组可以说是目前为止讲到的第一个真正意义上存储数据的结构。虽然前面学习的变量也能存储数据,但变量所能存储的数据很有限。...数组名 a 除了表示该数组之外,还表示该数组的首地址(关于地址现在先不讨

    0-1矩阵(字符串数组).cpp

    输入第一行为两个整数m和n(0,n)表示二维数组行数和列数,其后为m行数据,每行n个整数(0或1),输入数据中不会出现同一行有两个最长1序列的情况。 输出说明 找出每一行最长的连续1序列,输出其起始位置(从0开始...

    C语言二维数组几种常用的表示方法

    (2)、第二种是用一维数组来表示二维数组,从显示的元素地址可以看出,二维数组和一维数组表示的二维数组在内存中的储存方式其实是一样的,不过使用二维数组看起来要简单些,只要不用进行地址转换。 (3)、第三...

    C语言高精度计算,使用数组

    另一方面,计算机又有数的表示范围的限制,在一般的微型计算机上,实数的表示范围为l0-38 -l038。例如,在计算N!时,当N=34时计算结果就超过了这个范围,无法计算了。这是由计算机的硬件性质决定的,用户一般是无法...

    PHP程序设计:数组的概念.ppt

    * 数 组 -----数组的概念与定义 课程内容 数组的概念 数组的定义 一、数组的概念 假如要存储一个班学生的成绩,如果使用变量来存储成绩,就需要定义多个变量,显然这个定义的过程相当耗费时间与精力,PHP语言提供了...

    指针数组和数组指针的区别.doc

    还需要说明的一点就是,同时用来指向二维数组时,其引用和用数组名引用都是一样的。 比如要表示数组中i行j列一个元素: *(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j] 就指向指针的指针,很早以前在说指针的时候...

    C++将文档文件变为二维数组

    C++中将一个文档文件数字变为二维数组表示

    函数、内存、一维数组、二维数组

    对于函数没有具体返回值的情况,返回值类型用关键字void表示, 那么该函数中的return语句如果在最后一行可以省略不写。 注意: •函数中只能调用函数,不可以在函数内部定义函数。 •定义函数时,函数的...

    trie数的数组实现

    这是刘汝佳大大代码的完整版,数组实现,《训练指南》209页 代码可以实现,输入n表示字典中有n个单词,之后请输入n个单词(注意本代码中字符为'a'~'z')然后进行询问,输入"..."退出程序

    多维数组的运算

    一、多维数组 简单来讲,多维数组就是“数字的集合”,数字排成一列的集合、排成长方形的集合、排成三维状或者(更加一般化)N 维状的集合都称为多维数组。 如上所述,数组的维数可以通过 np.dim()...3×2 的数组表示

    matlab求数组长度

    在MATLAB中,可以使用`length`函数来计算数组的...输出结果为`5`,表示数组`A`的长度为5。 需要注意的是,`length`函数返回的是数组的元素个数,而不是数组的维度。如果要获取数组的维度信息,可以使用`size`函数。

    字符串 数组、字母和ASCII值应用

    "表示 例如,输入arr=(1,2,30,3),输出:a b ? c 八、输入一数组,按照英文26个字母顺序,输出每个数字对应的字母,如果查不到,则输出?。如[1,3,30],输出ac?。 九、把数组中的1-...

    C++指针数组、数组指针、数组名及二维数组技巧汇总

    本文较为详细的分析了关于理解C++指针数组,数组指针,数组名,二维数组的一些技巧。是比较重要的概念,相信对于大家的C++程序设计有一定的帮助作用。...&a是数组的地址,注意是数组的地址,表示数组这个

    matlab中数组和矩阵的区别

    数组是由相同类型的元素组成的一组数据。在 MATLAB 中,可以使用一维数组和多维数组。...矩阵的大小用行数和列数来表示。 总之,数组是一种基本的数据类型,而矩阵则是一种特殊的数组,具有特定的数学意义。

Global site tag (gtag.js) - Google Analytics