六十四进制

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;
}
       
       
      
      
     
     
    
    
博客已搬: 洪学林博客

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值