C语言冗长[关闭]

问题描述 投票:-2回答:1

我有这个问题,您在帕斯卡三角形中输入行数,并且必须在给定行中为帕斯卡三角形中的每个数字打印第二个战俘的总和:我的代码是:

#include<stdio.h>
#include <math.h>
unsigned long sum_squared(const int);

int main(){
printf("%lu\n", sum_squared(1));
// prints: 2
printf("%lu\n", sum_squared(4));
// prints: 70
printf("%lu\n", sum_squared(40));
// prints: 18031015830619195188
return 0;
}
unsigned long sum_squared(const int line){
unsigned long long n=(unsigned long)line,fk=1,k;
unsigned long c,sum=0;
unsigned long long a[line+1];
a[0]=1;
a[n]=1;
for(long i=1;i<n;i++){
k=(long)i;
fk=k;
c=1;
for(long j=1;j<k;j++){
fk=fk*j;
}
for(long j=(n-k+(1));j<=n;j++){
c=c*j;
}
a[i]=(c/fk);
}
for(long i=0;i<=n;i++){
sum= sum+ (pow(a[i],2));
}
return sum;
}

对于较大的数字,我有问题,前2个很好,但对于数字40,我总是得到54198718150374184

c long-integer unsigned
1个回答
0
投票

C中的整数的大小有限。在您的情况下,unsigned long具有64位。尽管some systems have 128-bit integers,这是某些系统上的最大宽度。

如果128位不足以用于您的应用程序,请使用bignum库。此处的“ bignum”是不具有大小限制的整数的术语。但是,这样做需要付出代价-计算速度较慢,并且代码更难编写和理解。


另一种解决方案-更改语言;例如,在Python中,默认情况下,整数没有大小限制。

© www.soinside.com 2019 - 2024. All rights reserved.