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
さて、君はこの数字を言えるか?
| 固定リンク
コメント