有趣的数学(一)

  2019年3月19日,我参加了学校和各企业一起办的双选会。本来我是打算再考一年的,不过我觉得如果能先尝试一下工作也很不错鸭。

  

 

  今天面试官问了我一道题:100的阶乘后面有多少个0?

  我刚听到的时候有点懵懵的,还以为他问我那个数有多大,被阶乘的巨大结果瞬间支配,甚至还想到了对数求解的方法。结果面试的小哥哥说这道题用数论的方法很简单的。

  我一拍脑门,求多少个0不就是有多少个10吗,那5,15,25,...,100不就是答案了嘛,然后我就回答了20个,啊,我的脑子啊!

  这个很明显应该看因数里有多少个2X5嘛,因为2是足够多的,所以看因数里面5的个数就好啦,25的倍数里面5有两个,所以是20+4=24个。

  对,没错,就是这么简单的题,哭辽,数学思维被小笼包侵占了。

  

 

后记

2020年4月15日,大数阶乘用字符串相乘也可

#include<iostream>
#include<stdio.h>
#include<cmath>
#include<cstring>
#include<vector>
using namespace std;

string multiply(string num1, string num2) {
        if(num1=="0"||num2=="0")return "0";
        vector<int> ans;
        ans.push_back(0);
        int z=0;
        for(int i=num2.size()-1;i>=0;i--)
        {
            int a=num2[i]-'0';
            int c=0,tag=z;
            for(int j=num1.size()-1;j>=0;j--)
            {
                int b=num1[j]-'0';
                if(tag>ans.size()-1){
                    ans.push_back(0);
                }
               int tmp=ans[tag];
                ans[tag]=(b*a+c+ans[tag])%10;
                tag++;
                c=(b*a+c+tmp)/10;
            }
            if(c!=0)ans.push_back(c);
            z++;
        }
        string str="";
        for(int i=ans.size()-1;i>=0;i--)
            str+=(ans[i]+'0');
        return str;
    }
 
int main(){
    string res="1";
    for(int i=1;i<=100;i++){
        res=multiply(to_string(i),res);
    }
    cout<<res<<endl;
    return 0;
}

 

//93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

 

posted @ 2019-03-19 12:33  鳄鱼四驱车  阅读(194)  评论(5编辑  收藏  举报