
C++求n!-m!,n!+m!; 将阶乘值中的每一个数字放在一个一维数组的一个元素中. 20
当N较大时,可将阶乘值中的每一个数字放在一个一维数组的一个元素中.跪求高手赐教啊,老实说这是老师给的作业题但是想来想去想不明白,不用数组还会做。知道的指点一下不甚感激!...
当 N 较大时,可将阶乘值中的每一个数字放在一个一维数组的一个元素中.
跪求高手赐教啊,老实说这是老师给的作业题但是想来想去想不明白,不用数组还会做。
知道的指点一下不甚感激! 展开
跪求高手赐教啊,老实说这是老师给的作业题但是想来想去想不明白,不用数组还会做。
知道的指点一下不甚感激! 展开
3个回答
展开全部
去搜索“大数运算”
因为n!可能远远超过计算机表示数的范围,所以用字符串来当做数字进行运算,因为字符串的长度是没有限制的。具体的思想就是用一个char[]数组来表示一个数字,实现两个char[]数组的加法运算,再实现乘法运算。
因为n!可能远远超过计算机表示数的范围,所以用字符串来当做数字进行运算,因为字符串的长度是没有限制的。具体的思想就是用一个char[]数组来表示一个数字,实现两个char[]数组的加法运算,再实现乘法运算。
追问
可以给点代码吗?你一说我就懂那我不就...............
追答
自己搜“大数运算 源代码 c++”
展开全部
你只能定义longlongint的类型的数组了~~
然后
每一个都放在数组里面
然后
每一个都放在数组里面
更多追问追答
追问
可以给我代码么?
追答
#include
#include // for malloc()
#include // for memset()
#define QUOTIETY 4 // 内存分配系数,计算10000以内阶乘设置为4就足够,如果需要
// 计算更大的数的阶乘,则将该系数适当增大
void process(const int index, int *result);
int cnt = 1;
int main(void)
{
int index = 0;
int input = 0;
int *result = NULL;
// 获得输入数据
printf("请输入你要计算的阶乘数,内存有限,请不要超过10000:\n");
scanf("%d", &input);
while (input 10000)
{
printf("请输入合理的数据,谢谢:\n");
scanf("%d", &input);
}
// 申请空间储存计算结果
result = (int *)malloc(sizeof(int) * input * QUOTIETY);
if (result == NULL)
{
printf("内存申请失败!\n");
exit(-1);
}
memset(result, 0, sizeof(int) * input * QUOTIETY); // 初始化存储空间
result[0] = 1;
// 进行阶乘计算
for ( index = 1; index = 0L; --index)
{
printf("%d", result[index]);
}
putchar('\n');
printf("结果一共有%d位数!\n", cnt);
free(result);
return 0;
}
/*
* 计算阶乘核心代码
*/
void process(const int index, int *result)
{
int product = 0; // 乘积
int carry = 0; // 进位
int remainder = 0; // 余数
int i = 0;
for (i = 0; i < cnt; ++i)
{
product = result[i] * index + carry;
carry = product / 10;
remainder = product % 10;
result[i] = remainder;
}
if (carry != 0)
{
while (carry / 10 != 0)
{
result[cnt] = carry % 10;
carry /= 10;
++cnt;
}
result[cnt++] = carry;
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询