2014-05-11 65 views
2

如何處理比C語言中的大10^200或更大的整數? 即使我使用很長時間,它也不會工作。 那我該怎麼辦?我聽說過大整數。但不知道如何使用它。據我所知它是C#的庫函數。但我正在與C.是否有其他方式,除了大整數與這樣的大整數工作? 可以有人也解釋我如何使用大整數?我應該使用哪種數據類型來存儲C語言中的變量10^200?

爲了澄清,我只是尋找一個解決方案,將在C.

工作
+0

我通常會使用libgmp。 – U2EF1

回答

2

similair question

總之,沒有內置型,但也有具有這種能力的開源庫:Boost.MultiprecisionBoost license)的C++和GMP爲C.(LGPL V3/V2雙許可證)

如果某些原因(如許可證不兼容)你不能使用這些庫,如果你要自己實現這些功能,有一些技巧。

1

存在Arbitrary-precision arithmetic的概念,並且有很多庫可以滿足您的要求,通常這些庫正在尋址具有整數或浮點數的任意精度算術或Fixed-point arithmetic

你可以找到很多針對不同平臺,許可證和語言的解決方案,這取決於你想在什麼樣的環境下做什麼,但是總的來說,你會找到很多選擇。

2

這是我們如何通過使用整數數組(儘管它最好使用字符數組)。我已經顯示只有加法,像比較一樣的休息操作,你可以自己寫的乘法減法。

#include<stdio.h> 
#include<stdlib.h> 
#define len 500 // max size of those numbers you are dealing 

int findlength(int num[]) 
{ 
     int i=0; 
     while(num[i]==0) 
      ++i; 
     return (len-i); 


} 


void equal(int num[] ,int a[]) 
{ 
     int i; 

     for(i=0;i<len;++i) 
      num[i]=a[i]; 

     free(a); 

} 


void print(int num[],int l) 
{ 
     int i; 

     for(i=len-l;i<len;++i) 
      printf("%d",num[i]); 

     printf("\n"); 

} 


int *add(int num1[] , int num2[]) 
{ 
     int i,carry=0; 
     int *a = malloc(sizeof(int)*len); // an dynamic answer array has to be created because an local array will be deleted as soon as control leaves the function 

     for(i=0;i<len;++i) 
      a[i]=0; 

     for(i=len-1;i>=0;--i) 
     { 
      a[i]=num1[i]+num2[i]+carry; 
      carry=a[i]/10; 
      a[i]=a[i]%10; 
     } 

     return a; 

} 


void input_number(int num[]) 
{ 
     int i=0,temp[len],j; 
     char ch; 

     for(i=0;i<len;++i) // fill whole array by zero. helps in finding length 
      num[i]=0; 

     i=0; 

     printf("Enter number : "); 

     while((ch=getchar())!='\n') 
       temp[i++]= ch-'0'; //Saving number from left to right 

     //shifting whole number to right side, now numbers are stored as 00000012 , 00000345 etc... 

     for(j=0;j<=i;++j) 
      num[len-1-j]=temp[i-j-1]; 


} 

int main() 
{ 
     int num1[len],num2[len],num3[len]; // to save space Use character array of size len.Char is also numeric type. It can hold 0- 9 

     input_number(num1); // this way you can input those numbers 
     input_number(num2); 

     int len1=findlength(num1),len2=findlength(num2); // Might be used in Many operations. 

     equal(num3,add(num1,num2));// This way define add , or subtract or any other operation you wan to do but return pointer to answer array. 
     //Use equal function to equate "num3 = answer array" by some implementation. 

     print(num3,findlength(num3)); // to print the number. 
     // create an header file of all these function implementations and use them wherever you like 

     return 0; 
} 
相關問題