ネイピア
#include <stdio.h> #include <stdlib.h> //atoi
#define L 8000 #define N 4000
int i, k;
int c;
void sp(int a[], int b, int c[]);
void ad(int d[], int e[], int f[]);
void dp(int s[], int n);
int main(int argc, char* argv[]){
int n= atoi(argv[1]);
int s[L]; //有効桁数
int a[L];
//配列初期化-------------------------------
s[0]= a[0]= 1;
for(k=1; k<=L; k++){
s[k]= a[k]= 0;
}
//計算---------------------------
for(k=1; k<=N; k++){
//t= t*i;
//e+= 1/t;
sp(a,k,a);
ad(s,a,s);
}
dp(s,n);
return 0;
}
void sp(int a[], int b, int c[]){
int r= 0;
for(i=0; i<L; i++){
long w= a[i];
c[i]= (w+r)/b;
r= ((w+r)%b)*10;
}
}
void ad(int d[], int e[], int f[]){
c= 0;
for(i=L; i>=0; i--){
f[i]= d[i]+e[i]+c;
if(f[i]<10){
c= 0;
}else{
f[i]-= 10;
c= 1;
}
}
}
void dp(int s[], int n){
//表示指定---------------------------------
printf("%d.", s[0]+1); //整数と.表示
for(i=0; i<n; i++){
if(i!=0 && i%50==0){
printf("\n "); //改行
}
printf("%d", s[i+1]); //数値表示
}
printf("\n");
}
/*
//ネイピア数計算---------------------------
t= 1;
e= 1;
for(i=1; i<n+10; i++){
t= t*i;
e+= 1/t;
}
printf("%f\n", e);
*/
この記事が気に入ったらサポートをしてみませんか?