質問

また、プログラムをCとしての宿題に出張など、国内の宿探しのお得な商品が二つの長い数字を文字として文字列になります。例:123456789021と132456789098.では、文字列に変換して長長くintを乗算を用意しています。その結する非常に大規模以上の長い長intかもしれません)。誰でもできるのでお勧めいを行う方法をこの増殖?

役に立ちましたか?

解決

こちらのアプローチ:どのようにいを掛けるこれらの数字を手でしめる。このメソッドを実装する必要C.また発見:

  • ブまでの整数(代表される文字列として入桁
  • に変換する方法は各桁に戻る整数値 0 <= d < 10
  • どのように管理し配列の桁ります。どのように大きの配列には?)
  • 書き方のループ(s)が実施する必要性増殖
  • を管理する方法を製品から一桁の
  • どのように変換表示に戻る文字出力

他のヒント

バイト配列として表さ

通常大きな整数。あなたはDLRでMicrosoftのBigIntegerの実装を見ることができます。私は、彼らがクヌース

が開発したアルゴリズムを使用したと思います

このチェック BigInteger図書館非常に基本的なサンプルコード 世界中です。

ご興味のある方の自宅の炊き込みコードC(乗算):

////////////////////////////////////////////////////////////////////////////////

Code removed after I checked the home-work tag ;)

///////////////////////////////////////////////////////////////////////////////////////

この作品の一部は以前のプログラミングコンテスト参加をしましたががくても高速乗算アルゴリズムを実現致しました Karatsubaアルゴリズム私は個人的にはこの現実時間コンテスト

男ねえ、これをチェックアウト、私はちょうど私の宿題の一部としてyester日に完了します:

#include<stdio.h>
#include<string.h>

int main()
{
    char one[195];
    char two[195];
    char temp[195];
    int a[195],c[195],b[195];
    int x,i,j,k,l,p,add;

    for(;;)/*determining the larger number...*/
    {
        printf("Input A:");
            gets(one);
        printf("Input B:");
            gets(two);

        k=strlen(one);
        l=strlen(two);
        if(l>k)
        {
            strcpy(temp,one);
            strcpy(one,two);
            strcpy(two,temp);
            break;
        }
        else
        {
            break;
        }
    }
        k=strlen(one);
        l=strlen(two);
    for(p=0;p<195;p++)/*assigning all initial values to 0*/
    {
        a[p]=0;
        b[p]=0;
        c[p]=0;
    }

    for(i=0;one[i];i++)/*converting char to integer(note:1,as a character assigned as 49.)*/
    {
        a[i]=((one[--k])-48);
    }

    for(i=0;i<two[i];i++)
    {
        b[i]=((two[--l])-48);
    }


    for(i=0;i<=strlen(two);i++)/*main algorithm*/
    {
        add=0;
        p=0;
        for(j=i;j<=(2*strlen(one)-1);j++)
        {
            x=c[j]+b[i]*a[p]+add;
            c[j]=x%10;
            add=x/10;
            p++;
        }
    }

    printf("\nMultiplication:");
    for(p=(2*strlen(one)-1);p>=0;p--)
    {
        if(p>strlen(one)&&c[p]==0)
        {
            continue;
        }
        printf("%d",c[p]);
    }
    printf("\n");
}

あなたは大きな整数arithmetikためのライブラリを使用することができ、ウィキペディアはここのリストを持っていますます。

別のアプローチは、結果を表示する際に、フロート/ダブルSTIP小数オフとして数値を乗算することであろう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top