« ごめんなさいを許容できるか? | トップページ | シャポールージュ »

2007年1月24日 (水)

1~30を掛けると幾つ?

友人から1~30を掛けると幾つになるか聞かれた…。

「プログラムで求められる?」
と聞くので…
「簡単だよ。チョット待ってて…。」
と答えたのだが…。
やってみて焦った。


桁数が全然足りない。(笑)

取り合えずダブルで計算すると…。

#include<stdio.h>
void main(void)
{
    double a,i;
    for(a=1.0,i=2.0;i<=30.0;i+=1.0)
        a*=i;
    printf("%f\n",a);
}

結果
265252859812191030000000000000000.000000
内部変数で拾うと
2.6525285981219e+032
です。

でも、正確に計算すると…
と言う訳で真っ直ぐに計算する。

#include<stdio.h>
#include<memory.h>
#define MAX_PLACE 50
void add(int*a,int*b){
    int i;
    for(i=0;i<MAX_PLACE;i++){
        a[i]+=b[i];
        if(a[i]>=10){
            a[i+1]+=1;
            a[i]%=10;
        }
    }
}
void main(void)
{
    int a[MAX_PLACE],b[MAX_PLACE];
    int i, j;
    memset(a,0,sizeof(a));
    a[0]=1;
    for(i=2;i<=30;i++){
        memcpy(b,a,sizeof(a));
        for(j=1;j<i;j++){
            add(a,b);
        }
    }
    for(i=MAX_PLACE-1;i>=0;i--)
        if(a[i]!=0)
            break;
    for(;i>=0;i--)
        printf("%d",a[i]);
    printf("\n");
}

結果
265252859812191058636308480000000
さて、君はこの数字を言えるか?

|

« ごめんなさいを許容できるか? | トップページ | シャポールージュ »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/108365/13638254

この記事へのトラックバック一覧です: 1~30を掛けると幾つ?:

« ごめんなさいを許容できるか? | トップページ | シャポールージュ »