问题描述
我正在为作业编写脚本,如下所示:
((Huge Integer Class)创建一个类HugeInteger,该类使用 i元素的40元素数组,用于存储最大40位的整数 每。提供解析,toString,加法和减法的方法。方法解析 应该收到一个字符串,使用charat和方法提取每个数字 将每个数字的等效整数放入整数数组。对于 比较HugeInteger对象,提供以下方法: isEqualTo,isNotEqualTo,isGreaterThan,isLessthan, isGreaterThanorEqualTo和isLessthanorEqualTo。这些都是一个 如果关系之间存在关系,则返回true的谓词方法 两个HugeInteger对象,如果关系确实返回false 不举行。提供谓词方法isZero。
我想出了这段代码:
import java.util.Scanner;
// Here is the H U G E integer class
public class HugeInteger {
int[] digits;
boolean checkvalidity;
HugeInteger(String str){
// Split it into 40 parts across an array
parse(str);
}
HugeInteger(char[] array){
this(new String(array));
}
HugeInteger(int length){
digits = new int[length];
}
int size(){
return digits.length;
}
void parse(String str){
digits = new int[str.length()];
for (int i = 0; i<str.length(); i++)
digits[i]=str.charat(i) - '0';
}
public String makeString(){
String str = "";
int i;
for(i = size() -1; i >=0; i--){
if (digits[i] != 0)
break;
}
System.out.println();
for(int j = i; j>=0; j--){
str = digits[j] + str;
}
return str;
}
//isEqualTo
public boolean isEqualTo(HugeInteger X){
if (this.checkvalidity || X.checkvalidity){
return false;
}
for (int i = 0; i < this.size(); i++)
if (this.digits[i] != X.digits[i])
return false;
return true;
}
//isNotEqualTo
public boolean isNotEqualTo(HugeInteger X){
return !checkvalidity && !X.checkvalidity && !this.isEqualTo(X);
}
//isGreaterThan
public boolean isGreaterThan(HugeInteger X){
return !checkvalidity && !X.checkvalidity && !this.isLessthan(X);
}
//isLessthan
public boolean isLessthan(HugeInteger X){
for (int i = size() - 1; i>=0; i--){
if (digits[i] < X.digits[i])
return true;
if (digits[i] > X.digits[i])
return false;
}
return false;
}
//isGreaterThanorEqualTo
public boolean isGreaterThanorEqualTo(HugeInteger X){
return !checkvalidity && !X.checkvalidity && this.isLessthan(X);
}
//isLessthanorEqualTo
public boolean isLessthanorEqualTo(HugeInteger X){
return !checkvalidity && !X.checkvalidity && this.isGreaterThan(X);
}
//isZero
public boolean isZero(){
HugeInteger z = new HugeInteger ("0");
if ((z.toString()).equals(this.toString()))
return true;
else
return false;
}
//checklength
void checklength(int length){
length += 1;
if(size() >= length)
return;
int[] x = new int[length];
int k = length;
for(int i = size() -1; i >= 0; i--)
x[--k] = digits[i];
digits = x;
}
public HugeInteger add(HugeInteger X){
int length = size();
if(X.size() > length)
length = X.size();
checklength(length);
X.checklength(length);
HugeInteger result = new HugeInteger(length + 1);
int carry = 0;
for (int i = length; i>=0; i--){
result.digits[i]= digits[i] + X.digits[i] + carry;
if (result.digits[i] < 10){
carry = 0;
}
else{
carry = result.digits[i] % 10;
result.digits %= 10;
}
}
return result;
}
public HugeInteger subtract(HugeInteger X){
int borrow = 0;
HugeInteger result = new HugeInteger(this.size());
if (checkvalidity || X.checkvalidity || this.isLessthan(X)){
System.out.println("Negative integers are not supported.");
checkvalidity = true;
return this;
}
for (int i = 0; i < X.size(); i++){
result.digits[i] = this.digits[i] - X.digits[i] + borrow;
if (result.digits[i] >= 0)
borrow = 0;
else{
result.digits[i] += 10;
borrow = 1;
}
}
return result;
}
// Oh lawd here comes the main
public static void main(String[] args) {
//I used a RNG 40 times on google for this number.
HugeInteger x = new HugeInteger("3860212152246790390766126144795673312670");
HugeInteger y = new HugeInteger("7728093673730608095378478497442287097340");
//Established zero value,only used 10 digits.
HugeInteger z = new HugeInteger("0000000000");
if(x.isEqualTo(y))
System.out.println(x + " Is Equal To " + y);
if(x.isLessthan(y))
System.out.println(x + " Is less Than " + y);
if(x.isNotEqualTo(y))
System.out.println(x + " Is Not Equal To " + y);
if(x.isGreaterThan(y))
System.out.println(x + " Is Greater Than " + y);
if(x.isGreaterThanorEqualTo(y))
System.out.println(x + " Is Greater Than Or Equal To " + y);
if(x.isLessthanorEqualTo(y))
System.out.println(x + " Is Less Than Or Equal To " + y);
if(z.isZero())
System.out.println("z:" + z + " Is zero.");
HugeInteger s = x.subtract(y);
HugeInteger a = x.add(y);
System.out.println("subtract: " + s);
System.out.println("add: " + a);
}
}
但是我收到此错误:
HugeInteger.java:111: error: bad operand types for binary operator '%'
result.digits %= 10;
^
first type: int[]
second type: int
1 error
我仍然是一个非常新的程序员,所以我猜测这是一个非常小的错误。我曾尝试研究此类错误的Stack Overflow,但没有任何反应。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)