http://acm.sdibt.edu.cn:8080/judge/contest/view.action?cid=351#problem/H
其实没多难,只要理解了在十进制里求法原理,在变通一下就没问题了。做的时候,在一个细节卡住,绕不出来了。。。
也就是将出进制数分解因数,然后分别就和十进制中一样了(在十进制中的算法其实也很巧妙,简单说就是,在所求数中找10的因子2,5出现的次数,而2明显多于5,所以只找5就好,大家都会就不细说了)
#include<stdio.h>
#include<memory.h>
char b[65];
int main()
{
    char s[100];
    long long sum,temp,ct,res;
    int k,t,i,j,prime[50],c[50],cnt=0;
    for(i=2;i<=7;i++)
    {
        if(!b[i])
        {
            for(j=i*i;j<=62;j+=i) b[j]=1;
        }
    }
    for(i=2;i<=62;i++)
    {
        if(!b[i]) prime[cnt++]=i;
    }//筛选法求素数
    while(scanf("%s%d",s,&k)!=EOF)
    {
        memset(c,0,sizeof(c));
        t=k;
        sum=0;
        res=0;
        for(i=0;i<cnt;i++)
        {
            while(t%prime[i]==0)
            {
                t/=prime[i];
                c[i]++;
            }
        }//将进制数分解因数
        for(i=0;s[i];i++)
        {
            sum*=k;
            if(s[i]>='0'&&s[i]<='9') sum+=s[i]-48;
            else if(s[i]>='A'&&s[i]<='Z') sum+=s[i]-'A'+10;
            else sum+=s[i]-'a'+36;
%

Comments are closed.

Post Navigation