FJUT ACM 3271 我想回去读幼儿园

Problem Description

集训队最菜的卖女孩的小火柴最近遇到了一个大麻烦.
他读幼儿园的妹妹问了他一题问题:给出一个数n,接着给出两个数a,b(2<=a<=b<=35).
让你求出a进制的n数转化为a+1进制后的值在转化为a+2进制,然后在转化为a+3进制,直到转化为b进制为止.
大于9的数用大写的ABCD....表示.
数据保证进制每次转化后的数小于10^18.
他太菜了,所以不会,相信各位ACMER大佬们会帮他解答(这么水的题你不帮我写?).

Input

T组输入

接下来T行,每行一个a进制整数n,两个正整数a,b

(T<=500000,0<=n<=10^18)

Output

对每次输入,输出答案

SampleInput
3
11 10 12
BAD 15 20
111111 2 5
SampleOutput
B
6BI
223
【思路】:显而易见这是一题水题,但是这题水题坑死我了,就是一个进制转化,从n进制先转成10进制
再从10进制转到另一个进制,但是我就是wa了好几次,后来seventh大佬救了我一发,发现是因为char 数组
最后没有然后strlen不能使用,wa成sb!
贴上代码领个教训
#include<stdio.h>
#include<string.h>
#include<math.h>
char ans[66];
char sums[66];
long long quick_pow(int a,int b)
{
    long long ans=1;
    long long temp=a;
    while(b!=0)
    {
        if(b&1!=0)
        {
            ans=ans*temp;
        }
        temp=temp*temp;
        b>>=1;
    }
    return ans;
}
int main()
{
    int t;
    while(~scanf("%d",&t))
    {
        while(t--)
        {
            int a,b;
            long long sum=0;
            memset(ans,0,sizeof(ans));
            memset(sums,0,sizeof(sums));
            scanf("%s%d%d",ans,&a,&b);
            if(ans[0]=='0')
            {
                printf("0
");
                continue;
            }
            int len=strlen(ans);
            for(int i=len-1; i!=-1; i--)
            {
                if(ans[i]>='0'&&ans[i]<='9')
                    sum+=(ans[i]-'0')*quick_pow(a,len-1-i);
                else if(ans[i]>='A'&&ans[i]<='Z')
                {
                    sum+=(ans[i]-'A'+10)*quick_pow(a,len-1-i);
                }
            }
            int i=0;
            int s;
            while(sum!=0)
            {
                s=sum%b;
                sum=sum/b;
                if(s>=0&&s<=9)
                    sums[i]=s+'0';
                else
                    sums[i]=s-10+'A';
                i++;
            }
            sums[i]=0;
            int lens=strlen(sums);
            for(int i=lens-1; i!=-1; i--)
            {
                printf("%c",sums[i]);
            }
            printf("
");
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/qq136155330/p/8642363.html