如何创建一个数据类型来保存200+;C中的长数字?
好的,我正试图解决这个问题: 利用我对c的了解,我得出了以下代码:如何创建一个数据类型来保存200+;C中的长数字?,c,types,C,Types,好的,我正试图解决这个问题: 利用我对c的了解,我得出了以下代码: #include <stdio.h> #include <conio.h> long double factorial(int); int main() { long double num[100], fact[100]; int i = 0, ex; scanf("%d", &ex); for ( i = 0; i < ex; i++ ) {
#include <stdio.h>
#include <conio.h>
long double factorial(int);
int main()
{
long double num[100], fact[100];
int i = 0, ex;
scanf("%d", &ex);
for ( i = 0; i < ex; i++ )
{
scanf("%lf", &num[i]);
}
i = 0;
printf("\n");
for (i = 0; i < ex; i++ )
{
fact[i] = factorial(num[i]);
printf("%.0lf\n", fact[i]);
}
getch();
return 0;
}
long double factorial(int num)
{
long double onum, fact;
int i;
fact = 1;
onum = num;
for ( i = 1; i < onum; i++ )
{
fact = fact * num;
num--;
}
return fact;
}
#包括
#包括
长双阶乘(int);
int main()
{
长双数字[100],事实[100];
int i=0,ex;
scanf(“%d”、&ex);
对于(i=0;i
问题是长双精度的长度不足以容纳100个值!那么,我如何才能创建一个能够容纳这么大的值的数据类型呢?没有一种本机数据类型能够容纳这么大的数字。看看这本书 GMP对于您的特定问题可能有点过分,但它会完成工作。您还可以编写自己的任意精度小库来实现这一点 编辑-一个示例bignum类型:
struct mybignum
{
int length;
int sign;
int digit[200];
};
您可以使用该结构实现小学的加法、减法、乘法等算法,并支持presto-200位数字。对于这个特殊问题,GMP确实是一个过火的问题 事实上,即使是Carl Norum提供的结构,虽然有用且更通用,但包含的内容也超出了您的需要。特别是,因为所有的阶乘都是正整数,所以不需要担心符号 而且,不需要实现加法、减法,甚至是一般的乘法。您只需要担心将这些“bignum”中的一个乘以一个整数,这并不难 这是乘法运算的存根
void multiply( mybignum bn, int factor ) {
// for each of the digits in 'bn'
// multiplies 'factor' by the particular digit
// adds the previous remainder and stores
// the new carry value
}
还有CanSpice,你到底是怎么得到正确格式的?我已经试了10分钟,但运气不好。谢谢修理!:)在每行前面加4个空格。简单的方法是选择您的代码,然后选择
{}
按钮。@CanSpice,谢谢。我觉得自己很笨。不管怎么说,你节省了我很多时间,更重要的是,你节省了很多人的时间,否则这些人的时间就会浪费在解决我未来的问题上!SPOJ现在是否接受
@pmg编号。它不接受conio.h,但它是外部的。虽然我可以在我的一个项目中使用类似的东西,但上面的代码必须在在线服务器上遵守,并且没有办法在那里添加完整的外部库。在C中有什么方法可以做到这一点吗?@Ishan-如果你不能使用这个库,你需要自己编写。一些小到足以满足这个问题的源代码限制,并且仍然足够快可以进行100次乘法的东西应该不会那么糟糕。谢谢。看来我得这么做了。我脑子里有点不对劲。我试试这个。谢谢!