本文主要是介绍华为面试的一道题目 真的是佩服自己好菜,时间到了才做出来,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
输入:
3
0x62 0x80 0x00
2
4
5
///
输出:
6
5
上面3表示连续输入3个 十六进制:0x62 0x80 0x00 二进制为 01100010 1000000 00000000
2表示连续输入两个数:4,5。即先取上面二进制的前四个,转为整数0110即为6,00101即为5
#include<stdio.h>
int main(){char temp[10000];int l=1,r=0,ii,i,j=1,k=1,n,m,mm,p,tt[999],aa[6],cul=0;int ss;scanf("%d",&n);while(n--){scanf("%x",&ss);for (i = 0; i < 8; ++i) //输入的同时将十六进制转为二进制{tt[8*j - 1 - i] = ss % 2; //因为是十六进制输入,刚好可以移位取bitss /= 2;} j++; //保证输入的每一个十六进制均成为8位的二进制 }//for(i=0;i<24;i++){// printf("%d",tt[i]);//}scanf("%d",&m); //输入截取数量mm=m;aa[0]=0;while(m--){scanf("%d",&p); //依次输入截取位数aa[k]=p;k++;}for(i=0;i<mm;i++){for((ii=aa[i+1]+cul-1);ii>=cul;ii--){r=r+tt[ii]*l; //二进制转十进制 l=l*2; }cul=cul+aa[i+1];printf("%d\n",r);l=1; //归零r=0;} return 0;
}
这篇关于华为面试的一道题目 真的是佩服自己好菜,时间到了才做出来的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!