void Print_Factorial ( const int N ){
int n=N;
int j;
int result=1;
if(n<0||n>1000){
printf("Invalid input");
}else if(n==0){
printf("1");
}else if(n>=0&&n<=12){
for(int i=1;i<=n;i++){
result*=i;
}
printf("%d",result);
}
else{
int number[3000]={0};//先初始化全部元素为零
number[0]=1;//第一位先为一
int temp=1;//用来记录每一位和i相乘的临时结果
int k=0;//用来记录当前最大的下标
int carry=0;//来自低位数的进位
for(int i=2;i<=n;i++){
/*遍历数组*/
for(j=0;j<=k;j++){
/*数组中的每一个数字分别与i相乘*/
temp=number[j]*i+carry;
number[j]=temp%10;//留下真正的位数,其余的暂存在carry里等待下次计算时进位
carry=temp/10;//计算出下一轮要进位的数
}while(carry)//最后一轮进行完了但carry还有数没有进位
{
number[j++]=carry%10;//数组里加一个下标储存carry里没有进位的数
carry/=10;
k++;
}
}
for(int u=k;u>0;u--){//数组里已储存好各位数,然后从最后一个下标开始输出
printf("%d",number[j]);
}
}
}
pta 6-10阶乘计算升级版 借鉴了很多人的好不容易写出了一个自己能理解的 可是不知道怎么回事大于12之后的好像不能运行一样 改了很多次都没改对
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 谛凌 2022-02-20 18:18关注
其实你看没有通过测试的点都是数据位数很多的情况,这个时候你就需要考虑,是不是自己设置的数据类型不合适
你写的大于12的情况,是想用数组记录结果的每一位吗本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 Vue3 大型图片数据拖动排序
- ¥15 划分vlan后不通了
- ¥15 GDI处理通道视频时总是带有白色锯齿
- ¥20 用雷电模拟器安装百达屋apk一直闪退
- ¥15 算能科技20240506咨询(拒绝大模型回答)
- ¥15 自适应 AR 模型 参数估计Matlab程序
- ¥100 角动量包络面如何用MATLAB绘制
- ¥15 merge函数占用内存过大
- ¥15 使用EMD去噪处理RML2016数据集时候的原理
- ¥15 神经网络预测均方误差很小 但是图像上看着差别太大