casey130
454678643678
采纳率66.7%
2021-01-25 11:01 阅读 9

各位大牛,为啥这阶乘一到15之后都是错的呢?

题目:计算n的阶乘尾部零的个数
#include<stdio.h>
int main()
{
    int t,sum=1,i,j,r,num=0;
    scanf("%d",&t);//输入一个数
    for(i=1;i<t+1;i++)
    {
        sum=sum*i;
     } //求阶乘sum
     printf("%d\n",sum);
     for(j=10;;j*=10)
     { 
     r=sum%j;
     if(r==0)
     num++;
     else
     break;
    }
    printf("%d\n",num);
    return 0;
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

6条回答 默认 最新

  • 已采纳
    weixin_42910064 泡视界 2021-01-25 11:15

    超出 int 类型的数值范围,数据就变成 负数了。

    点赞 评论 复制链接分享
  • casey130 454678643678 2021-01-25 11:14

    是因为值太大了吗,一计算14之后的阶乘,都是错的

    点赞 评论 复制链接分享
  • weixin_42910064 泡视界 2021-01-25 11:15

    建议 printf("%d\n",num); 改为  printf("%d %d\n", sum,num);

    这样你可以看看sum和num是不是都是对的

    点赞 评论 复制链接分享
  • casey130 454678643678 2021-01-25 13:02

    感谢,应该是超出范围之后就不能计算了,是吧?

     

    点赞 评论 复制链接分享
  • Ywx_0830 Ywx_0830 2021-01-27 10:50

    你把int改成longlong

    点赞 评论 复制链接分享
  • Ywx_0830 Ywx_0830 2021-01-27 10:52

    #include <iostream> using namespace std; int main() { longlong k,n,j=0,i=0; cin>>n; for(i=1;i<=n;i++){ for(j=1;j<=i;j++){ k=i*j; cout<<j<<"*"<<i<<"="<<k<<" "; } cout<<endl; } return 0; }

    点赞 评论 复制链接分享

相关推荐