0

演算を計算するクラス MyBigInteger を作成する必要があります: 非常に大きな整数 (Decimals で約 60 桁以上) を使用した mod 逆数および mod 乗数。これを解決するために、私は String を使って数値を格納し、add、subtract、mod、div などの基本的な関数を作成しています... しかし、ここで問題が発生しました。複数の関数は > 小さい数字でのみ機能し、7 桁、8 桁、またはそれ以上の数字で入力を使用すると、プログラムが応答しなくなります。大きな数値を格納するために文字列を使用するという私の考えは悪い考えかもしれないと思います。それらを格納するために配列を使用すると、クラスはより速く動作しますよね? 以下は私のコードです。加算および減算メソッドは正しく機能しているように見えるので、複数のメソッドのみを投稿します。最初は MyBigInteger に整数を掛けるメソッドです。

public class MyBigInteger {
private String val;
    public static final MyBigInteger ZERO = new MyBigInteger("0");
        ...
    private MyBigInteger mutiple( int k){
    MyBigInteger result = ZERO; 
    if( k == 0) return result;
    for( int i = 1; i <= Math.abs(k); i++) result = result.add(this);
    if( k > 0) return result;
    else return result.getOpposite(); // result.add(result.getOpposite()) == ZERO
}


    public MyBigInteger mutiple( MyBigInteger mbi){
    MyBigInteger result = ZERO;
    if( mbi.toString().charAt(0) != '-'){
        for( int i = mbi.toString().length() - 1; i >= 0; i--){
        result =  result.add(this.mutiple(Integer.parseInt(mbi.toString().charAt(mbi.toString().length() - i -1) + "")).mutiple((int)Math.pow(10, i)));
        }
    } else{
        for( int i = mbi.toString().length() - 1 ; i >= 1; i--){
            result = result.add(this.mutiple(Integer.parseInt(mbi.toString().charAt(mbi.toString().length() - i) + "")).mutiple((int)Math.pow(10, i-1)));
        }
        result = result.getOpposite();
    }
    return result;
}

あなたが提供できるかもしれないどんな助けにも感謝します

申し訳ありませんが、乗算方法が修正され、完全に機能します。しかし、私のクラスの問題はそれだけではありません。減算法を使用して mod メソッドを作成しました。そして、私の減算方法では、2 つの正の MyBigNumber に対する特定の減算である subAbs メソッドを使用します。

public MyBigInteger subAbs( MyBigInteger mBI){      
String result = "";
int i = this.getLength();
int j = mBI.getLength();
int s = 0;
int r = 0;
String temp = "";       
String val1 = this.toString();
String val2 = mBI.toString();
if( this.equalsTo(mBI) == true ) return ZERO;
else
if( this.greaterThan(mBI) == true){         
    for( int k = 0; k < i - j; k++) temp += "0";
    val2 = temp + val2;
    for( int k = i-1; k > 0; k-- ){
     //And the statement right behind this comment is the wrong line (224) in the image
        s = 10 + Integer.parseInt(val1.charAt(k) + "") - Integer.parseInt(val2.charAt(k) + "") - r;             
        if( s >= 10){
            s = s - 10;
            r = 0; 
        } else  r = 1;
        result = Integer.valueOf(s).toString() + result;
    }
    s = Integer.parseInt(val1.charAt(0) + "") - Integer.parseInt(val2.charAt(0)+"") - r;
    if( s >= 0 ) result = s + result;               
    else result = Integer.valueOf(s).toString() + result;   
    return new MyBigInteger(result);
} else return new MyBigInteger("-" + mBI.subAbs(this).toString());

}

大きな数を入力すると、例外が発生します。ここに画像の説明を入力

問題はメソッド subAbs から始まる可能性があります。

4

1 に答える 1