C语言密码转换26-i1,C语言之任意进制的转换

C语⾔密码转换26-i1,C语⾔之任意进制的转换
我们都知道转换进制是⼀个让⼈⽐较头疼的事情,下⾯我的代码不是最好的,也就仅仅是⼀个思路⽽已,⾄少我认为使⽤栈来进⾏进制转换是⽐较合适的⼀种⽅法,好了,不多叙述了。
#include
#include
澳大利亚霍顿/* 函数trans将⽆符号整数n翻译成d(2
#define M sizeof(unsigned int)*8
int trans(unsigned n, int d, char s[])
{
static char digits[] ="0123456789ABCDEF"; /* ⼗六进制数字的字符 */
框剪结构char buf[M+1];
int j, i = M;
if(d<2||d>16)拿来主义课堂实录
{
s[0]='\0'; /* 不合理的进制,置s为空字符串 */
return 0; /* 不合理的进制,函数返回0 */
传奇故事2010
}
buf[i]='\0';
do
{
buf[--i]=digits[n%d]; /*译出最低位,对应字符存⼊对应⼯作数组中*/
n/=d;
}while(n);
/
* 将译出在⼯作数组中的字符串复制到s */
for(j=0;(s[j]=buf[i])!='\0';j++,i++);
/* 其中控制条件可简写成s[j]=buf[i] */
return j;
}
/* 主函数⽤于测试函数 trans() */
main()
{
unsigned int num = 253;
int scale[]={2,3,10,16,1};
char str[33];
int i;
clrscr();
for(i=0;i
{
if(trans(num,scale[i],str))
printf("%5d = %s(%d)\n",num,str,scale[i]);
else
printf("%5d => (%d) Error! \n",num,scale[i]);
}
printf("\n Press any key \n");
getch();
}
下⾯我们来看看最为核⼼的⼀步,那就是获得余数的⽅式
168声讯台do
{
buf[--i]=digits[n%d]; /*译出最低位,对应字符存⼊对应⼯作数组中*/
n/=d;
}while(n);
注意这⾥的buf[i–],便是为了使得⽬标数对进制数取余后的结果存⼊buf的尾部,这其实也是利⽤了栈的知识,此处我们可以把buf数组,看做是⼀个存储结构为顺序表的顺序栈,这样就可以直接获得转换过进制之后的⼀串数字了。避免了再次进⾏尾部获取的步骤。
多孔性吸声材料总结:数据结构不是⼀套空泛的理论,它是⼀套灵活的解决问题的法宝,我们要多加思考,多加利⽤,来优化和改进我们的程序。这也是为什么”有时候优雅的实现,仅仅是需要⼀个函数,⽽这个函数必然联系着我们的数据结构“,最后希望我们能够共同进步吧。

本文发布于:2024-09-22 21:28:09,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/146059.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:进制   函数   对应   转换   数组   数据结构   顺序   字符
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议