Advertisement
qberik

pi.c

Mar 14th, 2022
925
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.39 KB | None | 0 0
  1. #define N 1000
  2.  
  3. #include "stdio.h"
  4. #include "stdlib.h"
  5. #define PERC N + 1
  6. int main(){
  7.   FILE* file = fopen( "pi.txt", "w" );
  8.   if (file == NULL)
  9.   {
  10.       printf("Error opening file!\n");
  11.       exit(1);
  12.   }
  13.   char* pi = (char*)malloc( sizeof(char) * ( PERC  )  );
  14.   int last = 0;
  15.   int boxes = ( PERC ) * 10 / 3 ;
  16.   int* reminders = (int*)malloc(sizeof(int) * boxes );
  17.   for( int i = 0; i < boxes; i++ )
  18.     reminders[i] = 2;
  19.   int heldDigits = 0;
  20.   for( int i = 0; i < PERC; i++ ){
  21.     int carriedOver = 0;
  22.     int sum = 0;
  23.     for ( int j = boxes - 1; j >= 0; j-- ){
  24.       reminders[ j ] *= 10;
  25.       sum = reminders[j] + carriedOver;
  26.       int quotient = sum / ( j * 2 + 1 );
  27.       reminders[ j ] = sum % ( j * 2 + 1 );
  28.       carriedOver = quotient * j;
  29.     }
  30.     reminders[0] =  sum % 10;
  31.     int q = sum / 10;
  32.     if ( q == 9 ) {
  33.       heldDigits++;
  34.     }else if ( q == 10 ){
  35.       q = 0;
  36.       for( int k = 1; k < heldDigits; k++ ){
  37.         char replaced = pi[ i - k ];
  38.         if( replaced == '9' ){
  39.           replaced = '0';
  40.         } else {
  41.           replaced++;
  42.         }
  43.         pi[i-k] = replaced;
  44.       }
  45.  
  46.       heldDigits = 1;
  47.     } else {
  48.       heldDigits = 1;
  49.     }
  50.     pi[last++] = q + '0';
  51.   }
  52.   for( int i = 0; i < PERC; i++ ){
  53.     if( i == 1 )
  54.       fprintf(file,".");
  55.     fprintf( file, "%c", pi[i] );
  56.   }
  57.   fprintf(file,"\n");
  58.   return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement