我正在做一些Project Euler问题,而且大多数时候,计算涉及超出int,float,double等的大量数字.
首先,我知道我应该寻找更有效的计算方法,以避免出现大量问题.我听说过Bignum图书馆.
但是,对于学术界的兴趣,我想知道如何编写我自己的解决方案来解决这个问题.
任何专家都可以帮帮我吗?(我的语言是C)
我必须存储一个大于long数据类型的最大值的整数值.如何在内存中存储和操作此值?
如果可能的话,请通过一个例子来说明.
我有大的数字K,C[1],C[2],C[3]等我算算B:
b = C[1]*C[2]+C[3]*C[4]+... (mod K)
Run Code Online (Sandbox Code Playgroud)
现在我计算全部金额然后做出类似的东西
b = SUM % K.
Run Code Online (Sandbox Code Playgroud)
但是当SUM变得大于无符号长限时,这不起作用,所以我必须使用类似的东西
b = (C[1]*C[2] %K + C[3]*C[4] %K ) %K
Run Code Online (Sandbox Code Playgroud)
但这很费时间.我试过使用unsigned long long,除了unsigned long,这也很耗时.有没有更好的方法?
UPD:
C = (unsigned long long int *) malloc(N*sizeof(unsigned long long int));
unsigned long int i, j, l;
C[0] = 1;
for (i=1; i<=N; i++) {
C[i] = 0;
l = (unsigned long int) i/2;
for (j=0; j<l; j++) {
C[i] += C[j]*C[i-j-1];
C[i] = C[i] …Run Code Online (Sandbox Code Playgroud) 如何在没有崩溃编译器的情况下将2计算到功率10000000.在c/c ++中,外部大整数的数据类型应该是什么.
我刚刚开始用c编程,我知道python的一些基础知识,所以当我在python中为变量设置一个非常大的int值时说'58944651132156484651'并打印该变量,一切都会好起来,但是当我对c做相同的回答时,是247 ...将会出现很多问题,例如我无法将我的电话号码设置为变量,还有很多类似的事情,所以请帮助我解决这个问题。记住我是python用户,现在我正在学习c。
/*code in c*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num = 456465465456456465465456;
printf("%d \n", num);
return 0;
}
#code in python
num = 54454564564848431284132116483211
print(num)
#that's better than the c's big print :(
Run Code Online (Sandbox Code Playgroud)