unsigned long 存不下结果,这该怎么办?
有一个题目是求1—40之间的素数的乘积。
我用unsigned long 存放结果,但是存不下。这怎么办?
[解决办法]
long long够
[解决办法]
http://blog.csdn.net/jianzhibeihang/article/details/4948267
[解决办法]
google 大数运算
[解决办法]
自己做一个乘法运算,用数组存结果。
#include "stdio.h"
#include "math.h"
#define MULTIPLIER_LENGTH 100//乘数的最大位数
#define MULTIPLICAND_LENGTH 100//被乘数的最大位数
void main()
{
int multiplier[MULTIPLIER_LENGTH]={0};//乘数
int multiplicand[MULTIPLICAND_LENGTH]={0};//被乘数
int product[MULTIPLIER_LENGTH+MULTIPLICAND_LENGTH]={0};//积
int i,j;
int me;//乘数的位数,从0算起
int mc;//被乘数的位数,从0算起
char ch;
ch=getchar();
i=0;
while('0'<=ch&&ch<='9')
{
multiplicand[i]=ch-'0';
ch=getchar();
i++;
}
mc=i-1;
ch=getchar();
i=0;
while('0'<=ch&&ch<='9')
{
multiplier[i]=ch-'0';
ch=getchar();
i++;
}
me=i-1;
int c=0;//进位值carry
for(i=0;i<=me;i++)//乘数
{
for(j=0;j<=mc;j++)//乘以每个被乘数
{
product[i+j]+=c+multiplicand[mc-j]*multiplier[me-i];
c=product[i+j]/10;
product[i+j]=product[i+j]%10;
}
if(c!=0){
product[i+mc+1]=c;
c=0;
}
}
i=MULTIPLIER_LENGTH+MULTIPLICAND_LENGTH-1;
while(!product[i]) i--;//找到第一个不为0的数
for(i;i>=0;i--)
printf("%d",product[i]);
printf("\n");
fflush(stdin);
getchar();
}