蓝桥杯:基础练习 十六进制转八进制

  基础练习 十六进制转八进制
时间限制:1.0s   内存限制:512.0MB
问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
  输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
  输出n行,每行为输入对应的八进制正整数。
注意
  输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
提示
  先将十六进制数转换成某进制数,再由某进制数转换成八进制。

                                                                                                                                                                                                                                                                                           

算法分析:

这个题目,我们要看到 "每个十六进制数长度不超过100000"  这句话。注意是100000位,不是<100000;

我们这里主要思想是先将十六进制转化为二进制(每4位二进制对应1位十六进制),然后将二进制转化为八进制(每3位二进制对应1位八进制)。

如:十六进制 A1  二进制 1010 0001  八进制 (010 100 001)241

(C语言)实现如下:

①采用gets输入时,需要处理%d在输入流中留下的回车;
②合理定义数组大小,其中十六进制位数与二进制是4倍关系,与八进制是4/3关系;
③使用strcat拼接字符串时注意,为了加快速度,需采用下文中方式,否则会超时(避免每次都从字符串首部查找’\0’);
④对于所得二进制可能不为3的整数倍时,01,101,110,101…..,这里采用取余法将01单独处理,后面整体处理;
⑤由于采用了while(scanf(”)!=EOF)输入形式,注意每次对尾部进行截断,避免对下次计算造成影响;
⑥以下程序采用纯C语言编写。

转自:http://blog.csdn.net/qingdujun/article/details/17404005

还没有评论,快来抢沙发!

发表评论

  • 😉
  • 😐
  • 😡
  • 😈
  • 😯
  • 😛
  • 😳
  • 😮
  • 😆
  • 💡
  • 😀
  • 👿
  • 😥
  • 😎
  • 😕