• 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;
    }
  • 相关阅读:
    网络故障排除工具 | 快速定位网络故障
    Brocade博科光纤交换机zone配置
    博科Brocade 300光纤交换机配置zone教程
    游戏开发
    第8章 图
    第7章 二叉树
    第6章 树型结构
    第5章 递归
    第4章 字符串、数组和特殊矩阵
    第3章 顺序表的链式存储
  • 原文地址:https://www.cnblogs.com/qq136155330/p/8642363.html
Copyright © 2020-2023  润新知