数组-08. 字符串转换成十进制整数(15)
2015-06-29 20:37
274 查看
输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果过滤后字符串的首字符为“-”,代表该数是负数。
输入格式:
输入在一行中给出一个以#结束的非空字符串。
输出格式:
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
输入样例:
输出样例:
主要有三个工作:
1.筛选合法字符:十六进制的字符
2.判断正负号
3.16->10进制
输入格式:
输入在一行中给出一个以#结束的非空字符串。
输出格式:
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
输入样例:
+P-xf4+-1!#
输出样例:
-3905
主要有三个工作:
1.筛选合法字符:十六进制的字符
2.判断正负号
3.16->10进制
#include <stdio.h> #include <math.h> int main(int argc, const char* argv[]) { char ch; int number_IN16[10000] = {0}; int i; int cnt = 0, FIRST = 1, sign = 1; /* FIRST == 1 表示首次出现的是- sign == 1 表示最后十进制的数的符号 */ while((ch = getchar()) != '#') { if( ch>='0' && ch<='9') { number_IN16[cnt] = ch-'0'; cnt ++; FIRST = 0; } else if(ch>='a' && ch<='f') { number_IN16[cnt] = ch-'a' + 10; cnt ++; FIRST = 0; } else if(ch>='A' && ch<='F') { number_IN16[cnt] = ch-'A' + 10; cnt ++; FIRST = 0; } if(ch == '-' && FIRST == 1) sign = -1; } int sum = 0, q = 0; for(i = cnt-1; i >= 0; i--) { sum += number_IN16[i] * pow(16, q); q ++; } printf("%d", sign * sum); return 0; }
相关文章推荐
- C语言—— 将N个数按输入时顺序的逆序排列,用函数实现
- CSS选择器详细总结
- UGUI 全方位了解
- 2.用户程序代码分析
- Stanford Named Entity Recognizer (NER)简单应用实例
- 从尾到头打印链表
- 再谈hash函数
- 动态规划三部曲之一个故事教你透彻理解动态规划(一)
- ARM指令集
- bzoj 4128 矩阵求逆
- Linux内核启动参数
- HDU 1863 畅通工程(最小生成树,prim)
- css制作旋转的正方体
- JAVA基础知识:网络
- 欢迎使用CSDN-markdown编辑器
- iOS刷新某个cell时候crash
- 数学之杨辉三角
- ARM基础知识(6.16)
- 牛客网(搜狗2015 C++工程师笔试题)
- 浅谈Docker隔离性和安全性