ネイピア

#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);
*/

いいなと思ったら応援しよう!