写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
数据范围:保证结果在
#include <stdio.h> unsigned int cal_mi(unsigned int arg, int i) { unsigned int res = 1; while(i--) res *= arg; return res; } int main() { int i = 0; unsigned int hex; unsigned int res=0; while(scanf("%x", &hex) != EOF) { for (i=0; i < 32 ; i++){ if ((hex >> i) & 0x1) res += cal_mi(2,i); } printf("%u\n", res); } return 0; }
/** 题目:HJ5 进制转换 * 思路:数据用 %x 十六进制输入,输出 %d 十进制 * 难点:内置的十六进制输入和十进制输出 */ #include <stdio.h> int main() { int num; scanf("%x", &num); printf("%d", num); return 0; }
/** 题目:HJ5 进制转换 * 思路:输入数据用字符串存储,从第三位字符开始遍历字符串,用秦九韶算转化进制 * 难点:字符串的 abcdef 、ABCDEF 和 0123456789 如何转化为十进制数 */ #include <stdio.h> #include <string.h> int main() { char str[20]; int num = 0; int len; gets(str); len = strlen(str); // 用秦九韶算法转化进制,分情况讨论: aA、bB、cC、dD、eE、fF分开讨论,0123456789 转化为数字后表示 48~57,减去48 for(int i = 2; i < len; i++) { switch (str[i]) { case 'a': case 'A': num = num * 16 + 10; break; case 'b': case 'B': num = num * 16 + 11; break; case 'c': case 'C': num = num * 16 + 12; break; case 'd': case 'D': num = num * 16 + 13; break; case 'e': case 'E': num = num * 16 + 14; break; case 'f': case 'F': num = num * 16 + 15; break; default: // 字符中的 0123456789 转化为 int 型后表示 48 ~ 57,-48 即可表示 0 ~ 9 num = num * 16 + ((int)str[i] - 48); break; } } printf("%d", num); return 0; }
#include<stdio.h> // #include<math.h> int get_lengh(char str[]){ int count=0; while( *str++ != '\0'){ count++; } return count; } //计算 d的z次方 int squr(int d,int z){ int sum=1; for(int i=0;i<z;i++){ sum *= d; } return sum; } int main() { char str[10]; gets(str); int lengh = get_lengh(str); int result=0; if(str[0] == '0' && str[1] == 'x'){ int i = 2; for(i=2 ; i<lengh ;i++ ){ if('A'<=str[i]&&str[i]<='F'){ result += (str[i]-55)*squr(16,lengh-i-1); } if('a'<=str[i]&&str[i]<='f'){ result +=(str[i]-87)*squr(16,lengh-i-1); } if('0'<=str[i]&&str[i]<='9'){ result += (str[i]-48)*squr(16,lengh-i-1); } } }else{ return 0; } printf("%d\n",result); return 0; } 我还是浅浅的做了下
#include <stdio.h> #include <string.h> #include <math.h> int hexToDec(const char *str) { int ans = 0, t = 0; for (int i = strlen(str) - 1; str[i]; i--) { if (str[i] >= '0' && str[i] <= '9') { ans += (str[i] - '0') * pow(16, t++); } else { ans += (str[i] - 'A' + 10) * pow(16, t++); } } return ans; } int main() { char str[10] = {0}; while (~scanf("0x%s", str)) { getchar(); printf("%d\n", hexToDec(str)); } return 0; }