Digit Sum of N!(牛客网,递归)

本文探讨了牛客网上的DigitSumofN!题目,提供了两种不同的代码实现方法。一种是通过列举大量数据总结出的简单规律进行快速求解;另一种则是利用递归思想,通过对n!的每一位数进行操作,最终得出结果。文章详细展示了两段代码的具体实现过程,为读者提供了深入理解该算法的途径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Digit Sum of N!(牛客网,递归)

今天的题比较简单,
但是还有另一种方法我推不出来

(请各位路过的大佬知道的可以私信我,谢谢)
题目:
我的代码很简单,就是列举了许多数据,然后得出一个比较简单的规律

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int main(int argc, char** argv) {
 int n;
 while(scanf("%d",&n)!=EOF){
  if(n==1){
   cout<<1<<endl;
  }
  else if(n==2){
   cout<<2<<endl;
  }
  else if(n==3||n==4){
   cout<<6<<endl;
  }
  else if(n==5){
   cout<<3<<endl;
  }
  else{
   cout<<9<<endl;
  }
 }
 return 0;
}

参考别人的代码,能逆推出来结果,但看不懂他写代码的思路
代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
int F(int n)
{
    int sum=n,i,k,com;
    char name[1000];
    for(i=n-1;i>1;i--)
    {
        com=0;
        sprintf(name,"%d",sum);
        //printf("---%s\n",name);
        for(k=0;k<strlen(name);k++)
        {
            com+=i*(name[k]-'0');
            //printf("+++%c\n",name[k]);
        }
        sum=com;  
    }
    printf("%d\n",sum);
    return sum;
}
int main()
{
    int n;
    while(scanf("%d",&n))
    {
    printf("%d\n",(F(n)/10)+(F(n)%10));
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值