1 solutions

  • 2
    @ 2023-10-28 13:03:14
    先了解16进制转10进制的方法:
    如有:
    "5AE"的16进制数字,A=10,E=14
    转换方法:
    5          A         E
    16^2       16^1      16^0
    *          *         *
    5          10        14
    =16^2*5 + 16^1*10 + 16^0*14
    =1280+160+14
    =1454
    所以"5AE"的16进制数字="1454"的10进制数字
    

    所以题目这样做: 但这次A=1,而不是1=1,而且数据要用long long

    #include<iostream>
    #include<string>
    using namespace std;
    long long pow(int x,int y)//不要用cmath的pow() ! 会超时 要自己搞一个
    {
     long long s=1;
     for(long long i=0;i<y;i++)//指数次数
     {
      s*=x;
     }
     return s;
    }
    int main()
    {
     string a;
     cin>>a;
     long long s=a.length(),t=0;
     long long b[s];
     for(long long i=0;i<s;i++)
     {
      b[i]=a[i];
      b[i]-=64;//先将字母转化为数字先,如A换为1
      t+=b[i]*pow(26,s-i-1);//模拟26进制的方法
     }
     cout<<t;//输出
     return 0;//完结散花!
    }
    
    • @ 2023-10-29 0:06:23

      建议不要用pow函数,而是用循环通过“累乘”的方式自己计算26的各个次方。以后学哈希、ST表等涉及指数函数或对数函数的具体值的时候,也会用到这样的做法。具体看我提交的代码。

    • @ 2023-10-29 10:25:35

      老师,我那个pow是自己做的@

  • 1

Information

ID
930
Time
1000ms
Memory
256MiB
Difficulty
9
Tags
(None)
# Submissions
131
Accepted
14
Uploaded By