西安俪人医院官网:编写一个巨型整数类,并实现加,减,乘,除,输入,输出等功能。

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/30 04:20:54
请构造一种新的整数类型MEGA_INTECER,它可以使用无穷位有效整数(这只是从理论上讲而已,实际上受到硬件资源的限制),并可作加,减,乘,除,输入,输出等运算。请用一个演示程序检验你设计的新类型。
我想知道具体用c++语言怎么写

上楼大哥写的程序我怎么都看不懂啊!
我c++学得太差拉!

不知道你用的是不是java,如果是,可以直接用:java.math.BigInteger类就可以了呀。如果实在要写可以用数组的方式来做:下面是我写的一个类,不过目前只实现了加法,其他方法等有空再完善:

package test;

import java.math.*;
/**
* No concern with errors or exceptions, just for test
*
* @author xuezi
*
*/

public class BigIntegerOp {
public String plus(String num1, String num2) {
if(num1.length() < num2.length()){
String tmpStr = num1;
num1 = num2;
num2 = tmpStr;
}
char[] c1 = new char[num1.length()];
char[] c2 = new char[num2.length()];
for (int i = 0; i < num1.length(); i++) {
c1[i] = num1.charAt(i);
}
for (int i = 0; i < num2.length(); i++) {
c2[i] = num2.charAt(i);
}
System.out.println("c1=" + String.valueOf(c1));
System.out.println("c2=" + String.valueOf(c2));
int[] int1 = new int[c1.length];
int[] int2 = new int[c1.length];
charToInt(c1, int1);
charToInt(c2, int2);

int[] intArray = new int[c1.length + 1];// impossible length than LEN+1

int carryNum = 0;
for (int i = c1.length - 1; i >= 0; i--) {
// just copy num to result array
int tmp = int1[i] + int2[i] + carryNum;
if (tmp >= 10) {
intArray[i + 1] = tmp - 10;
carryNum = 1;
} else {
intArray[i + 1] = tmp;
carryNum = 0;
}
}
intArray[0] = carryNum;

StringBuffer res = new StringBuffer("");
boolean isHead = true;
for (int i = 0; i < intArray.length; i++) {
if (intArray[i] == 0 && isHead) {
continue;
} else {
res.append(intArray[i]);
isHead = false;
}
}

return res.toString();
}

private void charToInt(char[] c, int[] r) {
if (c.length > r.length) {
System.out.println("error");
return;// error
}
int diff = r.length - c.length;
for (int i = r.length - 1; i >= 0; i--) {
if((i - diff) >= 0){
r[i] = Integer.parseInt(String.valueOf(c[i - diff]));
} else {
r[i] = 0;
}

}
}

public static void main(String[] args) {
String t = new BigIntegerOp().plus("9223372036854775807", "300");

System.out.println("t=" + t);
}
}

我曾经在写过一个,在硬盘要找找,有兴趣softnow@sina.com

记得以前看过的做法是转换成字符放在char*里,然后位操作.具体的算法记不起来了