2202_75587406 2023-07-29 14:50 采纳率: 100%
浏览 10
已结题

关于##include#的问题,如何解决?

题目是这样的:n的阶乘定义为n!=123……n 如3!=6 n!通常最后会有很多0,如5!=120 最后有一个0,现在统计n!去除末尾的0后,最后k位是多少?
范围:1< =n< =1400000 1< =k< =10
我总是过不去。
以下是代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    long long n,k,m;
    char t;
    long long s=1,p=1;
    string str[100];
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        s=s*i;
        while(s%10==0) s/=10;
        s=s%10000000000;
    }
    for(int i=0;i<k;i++){
        if(s){
            str[i]=s%10+48;
            s/=10;
        }else str[i]='0';
    }
    for(int i=k-1;i>=0;i--) cout<<str[i];
    cout<<endl;
    return 0;             
}

请帮忙看下

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-07-29 16:08
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7805001
    • 你也可以参考下这篇文章:输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以答案为2
    • 除此之外, 这篇博客: 数据结构:递归算法中的 2、求一个数的阶乘:n! 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

      1

      n! = n*(n-1)*(n-2)*......1

        规定:

        ①、0!=1

        ②、1!=1

        ③、负数没有阶乘

        上面的表达式我们先用for循环改写:

      /**
       * 0!=1  1!=1
       * 负数没有阶乘,如果输入负数返回-1
       * @param n
       * @return
       */
      public static int getFactorialFor(int n){
          int temp = 1;
          if(n >=0){
              for(int i = 1 ; i <= n ; i++){
                  temp = temp*i;
              }
          }else{
              return -1;
          }
          return temp;
      }

      如果求阶乘的表达式是这样的呢?

      n! = n*(n-1)!

      我们用递归来改写:

      /**
       * 0!=1  1!=1
       * 负数没有阶乘,如果输入负数返回-1
       * @param n
       * @return
       */
      public static int getFactorial(int n){
          if(n >= 0){
              if(n==0){
                  System.out.println(n+"!=1");
                  return 1;
              }else{
                  System.out.println(n);
                  int temp = n*getFactorial(n-1);
                  System.out.println(n+"!="+temp);
                  return temp;
              }
          }
          return -1;
      }

      我们调用该方法getFactorial(4);即求4!打印如下:

        

        这段递归程序的边界条件就是n==0时,返回1,具体调用过程如下:

        


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月14日
  • 已采纳回答 8月6日
  • 修改了问题 7月30日
  • 创建了问题 7月29日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境