当前位置:   article > 正文

蓝桥杯十六进制与十进制的相互转换

蓝桥杯十六进制与十进制的相互转换

一.十转十六

常用的数学思维十转十六是对一个十进制的数反复对十六求余,然后对其进行逆序排列。其中十六进制的数是满十六进一,10~15依次用ABCDEF表示。对此我们设立一个字符串数组,里面存储0123456789ABCDEF这个十六个字符。我们对输入的十进制数进行求余然后得出的余数对应着数组中的同一位置同一字符。然后再利用字符型指针对其进行逆序即可得到十六进制数。具体代码如下:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char hex[] = "0123456789ABCDEF";//存储数组
  5. char str1[100],str2[100];
  6. char *p = str1; char *q = str2;//分别用于一次存储和逆序存储
  7. int n = 0;
  8. int x;
  9. scanf("%d",&x);
  10. if(x==0)
  11. {
  12. *q = hex[x%16];
  13. }
  14. else
  15. {
  16. while(x)
  17. {
  18. *p++ = hex[x%16];//对应的余数进行存储
  19. x = x/16;
  20. n++;
  21. }
  22. p--;
  23. while(n)
  24. {
  25. *q++ = *p--;//逆序
  26. n--;
  27. }
  28. }
  29. printf("%s",str2);
  30. return 0;
  31. }

二.十六转十

会了十转十六,反过来十六转十就是十分简单的。利用switch语句进行0~F的十进制转换判断。       同时设立变量储存位数,然后进行次幂的求和。具体代码如下:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <math.h>
  4. int main()
  5. {
  6. char a[8];
  7. int index;
  8. int b[8];
  9. scanf("%s",a);
  10. int len = strlen(a);
  11. int p = 0;
  12. double sum = 0;
  13. for (int i = 0; i < len; i++)
  14. {
  15. switch (a[i]) {
  16. case '0':b[p++] = 0;break;
  17. case '1':b[p++] = 1;break;
  18. case '2':b[p++] = 2;break;
  19. case '3':b[p++] = 3;break;
  20. case '4':b[p++] = 4;break;
  21. case '5':b[p++] = 5;break;
  22. case '6':b[p++] = 6;break;
  23. case '7':b[p++] = 7;break;
  24. case '8':b[p++] = 8;break;
  25. case '9':b[p++] = 9;break;
  26. case 'A':b[p++] = 10;break;
  27. case 'B':b[p++] = 11;break;
  28. case 'C':b[p++] = 12;break;
  29. case 'D':b[p++] = 13;break;
  30. case 'E':b[p++] = 14;break;
  31. case 'F':b[p++] = 15;break;
  32. default:break;
  33. }
  34. index = p;
  35. }
  36. for (int i = 0; i < len; i++)
  37. {
  38. sum = sum+ pow(16,index-1)*b[i];
  39. index--;
  40. }
  41. printf("%.0lf",sum);
  42. return 0;
  43. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/244432
推荐阅读
相关标签
  

闽ICP备14008679号