任务描述
字符串转换成十进制整数。 输入一个以 # 结束的字符串,滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果过滤后字符串的首字符为 “−”,代表该数是负数。
输入
输入一行字符,以 # 结束。注:输入的字符中十六进制的字符数不得超过 8 个。
输出
输出转换后的十进制数。
测试说明
测试用例 1
输入: zx1?ma0!kbq# 输出: 6667
测试用例 2
输入: +z--x1?ma0!kbq# 输出: -6667
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int cyr(char s[]); int main() { int i = 0, j=0, k; char a[100], s[100];//定义双数组,一个负责输入十进制数,一个负责存放转化后的数字 while ((a[i] = getchar()) != '#') { if (a[i] >= '0' && a[i] <= '9')//分情况,数字,小写字母和大写字母 { s[j] = a[i]; j++;//定义变量j作为s[]的下标,便于之后运算 } else if (a[i] >= 'a' && a[i] <= 'f') { s[j] = a[i]; j++; } else if (a[i] >= 'A' && a[i] <= 'F') { s[j] = a[i]; j++; } else if (a[i] == '-') { s[j] = a[i]; j++; } i++; if (i == 100)//字符串长度缩到一百之内 break; } a[i] = '\0'; s[j] = '\0';//字符串结束标志,本题加或不加均可,但是还是要规范写 cyr(s); return 0; } int cyr(char s[])//函数部分,实现转化 { int i = 0, n = 0, flag = 1;//定义flag用来实现负数的运算 if (s[0] == '-') { flag = -1;//如果'-'在前,就加上符号 } while (s[i] != '\0') { if (s[i] >= '0' && s[i] <= '9') n = n * 16 + s[i] - '0'; else if (s[i] >= 'a' && s[i] <= 'f') n = n * 16 + s[i] - 'a'+10;//这里加10是因为在16进制中a代表10 else if (s[i] >= 'A' && s[i] <= 'F') n = n * 16 + s[i] - 'A'+10; i++;//i++很重要,不要漏掉 } printf("%d", n * flag); return n; }
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int cyr(char s[]); int main() { int i = 0, j=0, k; char a[100], s[100]; while ((a[i] = getchar()) != '#') { if (a[i] >= '0' && a[i] <= '9') { s[j] = a[i]; j++; } else if (a[i] >= 'a' && a[i] <= 'f') { s[j] = a[i]; j++; } else if (a[i] >= 'A' && a[i] <= 'F') { s[j] = a[i]; j++; } else if (a[i] == '-') { s[j] = a[i]; j++; } i++; if (i == 100) break; } a[i] = '\0'; s[j] = '\0'; cyr(s); return 0; } int cyr(char s[]) { int i = 0, n = 0, flag = 1; if (s[0] == '-') { flag = -1; } while (s[i] != '\0') { if (s[i] >= '0' && s[i] <= '9') n = n * 16 + s[i] - '0'; else if (s[i] >= 'a' && s[i] <= 'f') n = n * 16 + s[i] - 'a'+10; else if (s[i] >= 'A' && s[i] <= 'F') n = n * 16 + s[i] - 'A'+10; i++; } printf("%d", n * flag); return n; }