六十四进制

本文介绍了如何将六十四进制数转换为十进制数的方法,通过给出的示例代码,深入理解六十四进制数的计算规则并实现程序化转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

程序猴子BMan致力于提升自己的bigger,有一天他得到一本《程序员装X手册10则》,里面的内容是这样的:
0.从零开始计数 
1.使用二进制 
领悟到这本书的内涵后BMan感慨万千,从那以后很长的一段时间他一直在使用二进制提升自己的bigger,后来他终于被0和1逼成了神经病。 
但是BMan并没有就此罢休,他现在还发明了一种比二进制bigger更高的东西­­"六十四进制"。 
BMan的六十四进制是这样的:["0~9","a~z","A~Z",#$] 这六十四个字符分别表示0~63这六十四个数, 0~9表示0~9,a~z表示10~35,A~Z表示36~61,#表示62,$表示63。 于是1a表示74,a$表示703。现在BMan想要一个能把六十四进制数转化成十进制的程序,你能帮他吗?

Input

输入文件的第一行为一个正整数T,表示有T组测试数据,接下来有T行,每行都有一个需要转化成十进制 数的六十四进制数,并且保证了这些数转成十进制数后的范围为[0,2^31)

Output

每组测试数据的输出占一行,既转换后的十进制数

Sample Input

3
10
1a
a$

Sample Output

64
74
703


单个读取位数计算值然后累加。
理解z=a[j]-39-'0';   a[j]-39得出的是ASCii码的值 减去'0',则变成
整型值,赋值给整型变量z
本题六十四进制计算方法同二进制,从右至左,第0位的值乘以
64的0次方,第一位的值乘以64的1次方......依次累加计算值。
代码如下:
#include 
   
    
#include 
    
     
#include 
     
      
using namespace std;
int main()
{
    int t;scanf("%d",&t);
    while(t--)
    {
        char a[1000];
        scanf("%s",a);
        int len,s=0,z,c;
        len=strlen(a);
        for(int j=0;j
      
       ='0'&&a[j]<='9') z=a[j]-'0';  //第j位的值
            else if(a[j]>='a'&&a[j]<='z') z=(a[j]-39-'0');
            else if(a[j]>='A'&&a[j]<='Z') z=(a[j]+19-'0');
            else if(a[j]==35) z=62;
            else if(a[j]==36) z=63;
            c=pow(64,len-j-1);  //第几位(从左向右)就是64的几次方
            s+=z*c;   //累加成十进制的值
        }
        printf("%d\n",s); 
    }
    return 0;
}
      
     
    
   
博客已搬: 洪学林博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值