如何處理比C語言中的大10^200或更大的整數? 即使我使用很長時間,它也不會工作。 那我該怎麼辦?我聽說過大整數。但不知道如何使用它。據我所知它是C#的庫函數。但我正在與C.是否有其他方式,除了大整數與這樣的大整數工作? 可以有人也解釋我如何使用大整數?我應該使用哪種數據類型來存儲C語言中的變量10^200?
爲了澄清,我只是尋找一個解決方案,將在C.
工作如何處理比C語言中的大10^200或更大的整數? 即使我使用很長時間,它也不會工作。 那我該怎麼辦?我聽說過大整數。但不知道如何使用它。據我所知它是C#的庫函數。但我正在與C.是否有其他方式,除了大整數與這樣的大整數工作? 可以有人也解釋我如何使用大整數?我應該使用哪種數據類型來存儲C語言中的變量10^200?
爲了澄清,我只是尋找一個解決方案,將在C.
工作總之,沒有內置型,但也有具有這種能力的開源庫:Boost.Multiprecision(Boost license)的C++和GMP爲C.(LGPL V3/V2雙許可證)
如果某些原因(如許可證不兼容)你不能使用這些庫,如果你要自己實現這些功能,有一些技巧。
存在Arbitrary-precision arithmetic的概念,並且有很多庫可以滿足您的要求,通常這些庫正在尋址具有整數或浮點數的任意精度算術或Fixed-point arithmetic。
你可以找到很多針對不同平臺,許可證和語言的解決方案,這取決於你想在什麼樣的環境下做什麼,但是總的來說,你會找到很多選擇。
這是我們如何通過使用整數數組(儘管它最好使用字符數組)。我已經顯示只有加法,像比較一樣的休息操作,你可以自己寫的乘法減法。
#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;
}
我通常會使用libgmp。 – U2EF1