字符串转换成十进制整数 十六进制转换十进制
2017-03-16 00:12
288 查看
字符串转换成十进制整数 (15分)
输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
输入格式:
输入在一行中给出一个以#结束的非空字符串。
输出格式:
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
输入样例:
+-P-xf4+-1!#
输出样例:
-3905
代码:
输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
输入格式:
输入在一行中给出一个以#结束的非空字符串。
输出格式:
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
输入样例:
+-P-xf4+-1!#
输出样例:
-3905
代码:
#include<stdio.h> #include<string.h> int ci(int flag)//求16的flag次方 { int i; if(flag == 0) return 1;//0次方 返回1 else{ int sum = 1; for(i = 0; i < flag; i++) { sum = sum * 16; } return sum; } } int main() { char a[1000]; char c[1000];//栈 int i, len, flag, top, r, sum; while(~scanf("%s", a)) { flag = 0; top = 0; r = 0; len = strlen(a); for(i = 0; i < len; i++){ if(a[i] == '-' && !flag)//如果第一个十六进制前面有负号,标记一下 { top = 1; } if((a[i] >= '0' && a[i] <= '9') || (a[i] >= 'A' && a[i] <= 'F') || (a[i] >= 'a' && a[i] <= 'f'))//判断是不是十六进制符号 { flag = 1;//遇到十六进制标记一下 c[r++] = a[i];//存入栈中 } } sum = 0;//转换成十进制的结果 flag = 0; while(r != 0) { if(c[r - 1] >= '0' && c[r - 1] <= '9')//0到9 { sum += ci(flag) * (c[r - 1] - '0'); flag++; } else if(c[r - 1] >= 'a' && c[r - 1] <= 'f')//10到15 { sum += ci(flag) * (c[r - 1] - 'a' + 10); flag++; } else if(c[r - 1] >= 'A' && c[r - 1] <= 'F')//10到15 { sum += ci(flag) * (c[r - 1] - 'A' + 10); flag++; } r--; } if(sum == 0) printf("%d\n", sum); else if(top) printf("-%d\n", sum); else printf("%d\n", sum); } return 0; }
相关文章推荐
- 字符串转换成十进制整数 (15分)
- 8.编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数
- 数组-08. 字符串转换成十进制整数(15)
- pta中 字符串转换成十进制整数
- 5-1 字符串转换成十进制整数 (15分) (这是补上的7月6号)
- 8、编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数, 然后打印出这个十进制整数对应的二进制形式。
- 字符串转换成十进制整数
- 字符串转换成十进制整数
- 数组-08. 字符串转换成十进制整数(15)
- 数组-08. 字符串转换成十进制整数(15)
- 7-39 字符串转换成十进制整数(15 分)
- 5-9 字符串转换成十进制整数 (15分)
- PTA-字符串转换成十进制整数
- 数组-08. 字符串转换成十进制整数(15)
- 十六进制字符串转换成十进制整数 天梯赛模拟题重现一
- 数组-08. 字符串转换成十进制整数
- 数组-08. 字符串转换成十进制整数(15)
- 数组-08. 字符串转换成十进制整数(15)
- 数组-08. 字符串转换成十进制整数(15)
- 数组-08. 字符串转换成十进制整数(15)