1

私は(学校用の)プロジェクトを持っていますが、外部ライブラリを絶対に使用できないため、大きな数のライブラリを使用できず、2つの(非常に)大きな数の積を取得する必要があります。だから私は実際にそれのために自分のコードを書くと思ったが、一桁の乗算を渡すことができないようだ。

これまでに行った方法は、文字「a」の配列があることです。そして、その数字のそれぞれを他の数で乗算します (乗算は 81 を超えることはできないため、つまり 9*9 です)。しかし、2つの配列を互いに乗算する方法がわかりません。

のように、

int a[] = {1,2,3};
int b[] = {4,5,6};

int r[200]; // To store result of 123x456. After processing should have value 56088

これまでの私のコードはここにあります...

#include <iostream>
using namespace std;

void reverseArray(int array[], int n)
{
    int t;
    for(int i=0;i<n/2;i++)
    {
        t = array[i];
        array[i] = array[n-i-1];
        array[n-i-1] = t;
    }
}

int main()
{
    int A[] = {1,2,6,6,7,7,8,8,8,8,8,8,8,8,8,8};
    int s = sizeof(A)/sizeof(int);
    int n = s-1;

    int R[50];


    int x = 2;

    int rem = 0;

    for(int i=0; i<s; i++)
    {
        R[i] = (A[n-i] * x) % 10;
        R[i] += (rem != 0) ? rem:0;
        rem = (A[n-i] * x) / 10;
    }

    reverseArray(R, s);

    for(int i=0; i<s; i++) cout<<R[i]; // Gives 2533557777777776

}

また、非常に大きな数の階乗を計算する同様のプログラムをここで見つけました。しかし、自分のニーズに合わせて変更するのに十分なほどコードを理解できていないようです。

質問が少し大ざっぱで申し訳ありません。

ありがとう。

4

3 に答える 3

1

現在行っているのと同じことを行いますが、2 番目の配列の各桁に対して、つまり、 をx使用する代わりにB[j]jは配列内のすべての桁をループしますB

于 2013-08-21T12:56:35.160 に答える
1

私は Java でやった. ここでは数字 N1 と N2 を使っている. サイズ 1000 の配列を作成している. 例を見てみましょう. これを解決する方法, N1=12, N2=1234. N1=12 の場合、temp=N1%10=2 この数字を数字 N2 と右から左に乗算し、結果を i=0 から始まる配列に格納します。N1 の残りの数字についても同様です。配列は結果を格納しますが、逆順になります。このリンクを見てください。http://ideone.com/UbG9dW#view_edit_box

//Product of two very large number
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

 class Solution {
    public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);
        int N1=scan.nextInt();
        int N2=scan.nextInt();
        //int N=scan.nextInt();
        int [] array=new int[1000];
        Arrays.fill(array,0);
        int size=multiply(N1,N2,array);
        for(int i=size-1;i>=0;i--){
            System.out.print(array[i]);
        }
    }
    public static int multiply(int N1, int N2, int [] result){
        int a=N1;
        int b=N2;            
        int count=0, carry=0;
        int i=0;
        int max=0;
        if(a==0||b==0)
            return 1;
        while(a>0){
            int temp1=a%10;
            a=a/10;
            i=0;
            while(b>0){
                int temp2=b%10;
                b=b/10;
                int product=result[count+i]+temp1*temp2+carry;
                result[count+i]=product%10;
                carry=product/10;
                i++;
                //System.out.println("ii="+i);
            }
            while(carry>0){
                result[count+i]=carry%10;
                carry=carry/10;
                i++;
                //System.out.println("iiii="+i);
            }
            count++;
            b=N2;
        } 
        //System.out.println("i="+i);

        return i+count-1;
    }
}
于 2015-03-01T10:23:30.313 に答える