惊现奇怪问题?!-阶乘数码

P1591 阶乘数码

U_92_Uranium @ 2022-01-15 21:51:44

0pts,样例都不过?请各位帮忙看看。

思路:高精度求阶乘+统计字符

代码如下:经个人检验,HPmLP()和Fac()均没有问题,问题大致出在统计字符那块。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cctype>
#include <cmath>
#include <algorithm>
#include <stack>
#include <queue>
#include <utility>
#include <map>
#include <set>
#include <list>
#include <vector>
using namespace std;
const int maxn=20005;
string HPmLP(string h,int l)//高精度乘单精度
{
    string r;
    int a[maxn]={0},len=h.size();

    for(int i=0; i<h.size(); ++i) {
        a[i]=h[h.size()-1-i]-48;
    }

    for(int i=0; i<h.size(); ++i) {
        a[i]*=l;
    }

    for(int i=0; i<h.size(); ++i) {
        a[i+1]+=a[i]/10;
        a[i]%=10;
    }

    while(a[len]!=0) {
        ++len;
        a[len]+=a[len-1]/10;
        a[len-1]%=10;
    }

    while(len>1&&a[len-1]==0) {
        --len;
    }

    for(int i=0; i<len; ++i) {
        r=(char)(a[i]+'0')+r;
    }

    return r;
}

string Fac(int n)//计算n 的阶乘,返回string
{
    string r="1";
    if(n==0||n==1) {
        return "1";
    }
    for(int i=n; i>=2; --i) {
        r=HPmLP(r,i);
    }
    return r;
}

int main()
{
    int n,t,a;
    char c;
    long long sum;

    scanf("%d",&t);
    while(t--) {//循环t次
        scanf("%d%d",&n,&a);
        c=(char)(a+'0');
        string s=Fac(n);//s存储阶乘
        int pos=s.find(c);//用find查找数码
        sum=0;
        while(pos!=-1) {
            ++sum;
            pos=s.find(pos+1,c);
        }
        printf("%d\n",sum);
    }

    return 0;
}

感谢您能耐心看完!如果看出问题,请评论回复,谢谢!


by newbie_QwQ @ 2022-01-15 21:57:48

@U_92_Uranium 问题如下:btd


by U_92_Uranium @ 2022-01-16 09:22:47

@Quhaoran123 std!


by newbie_QwQ @ 2022-01-16 09:28:12

@U_92_Uranium 我说宁是标题党。


by newbie_QwQ @ 2022-01-16 09:29:05

@U_92_Uranium 其实主要是标题前一半是标题党。


by U_92_Uranium @ 2022-01-16 09:34:38

谢谢。不过我想知道find 怎么错了。


by imljw @ 2022-01-16 09:50:20

  1. 
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <string>
    #include <cstdlib>
    #include <cctype>
    #include <cmath>
    #include <algorithm>
    #include <stack>
    #include <queue>
    #include <utility>
    #include <map>
    #include <set>
    #include <list>
    #include <vector>
    using namespace std;
    const int maxn=20005;
    string HPmLP(string h,int l)//高精度乘单精度
    {
    string r;
    int a[maxn]={0},len=h.size();
    
    for(int i=0; i<h.size(); ++i) {
        a[i]=h[h.size()-1-i]-48;
    }
    
    for(int i=0; i<h.size(); ++i) {
        a[i]*=l;
    }
    
    for(int i=0; i<h.size(); ++i) {
        a[i+1]+=a[i]/10;
        a[i]%=10;
    }
    
    while(a[len]!=0) {
        ++len;
        a[len]+=a[len-1]/10;
        a[len-1]%=10;
    }
    
    while(len>1&&a[len-1]==0) {
        --len;
    }
    
    for(int i=0; i<len; ++i) {
        r=(char)(a[i]+'0')+r;
    }
    
    return r;
    }

string Fac(int n)//计算n 的阶乘,返回string { string r="1"; if(n==0||n==1) { return "1"; } for(int i=n; i>=2; --i) { r=HPmLP(r,i); } return r; }

int main() { int n,t,a; char c; long long sum;

scanf("%d",&t);
while(t--) {//循环t次
    scanf("%d%d",&n,&a);
    c=(char)(a+'0');
    string s=Fac(n);//s存储阶乘
    sum=0;
    for(int i = 1;i <= s.size();i++){
        if(s[i-1] == c){
            sum++;
        }
    }
    printf("%lld\n",sum);
}

return 0;

}


|