数组-08. 字符串转换成十进制整数

数组-08. 字符串转换成十进制整数(15)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
张彤彧(浙江大学)

输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果过滤后字符串的首字符为“-”,代表该数是负数。

输入格式:

输入在一行中给出一个以#结束的非空字符串。

输出格式:

在一行中输出转换后的十进制数。题目保证输出在长整型范围内。

输入样例:
+P-xf4+-1!#
输出样例:
-3905
 1 #include<stdio.h>
 2 #include<math.h>
 3 #include<stdlib.h>
 4 #include<string.h>
 5 int main()
 6 {
 7     int i, j = 0, flag = 1, sum = 0;
 8     char str[100], s[20];
 9     gets(str);
10     for(i = 0; str[i] != '#'; i++)
11     {
12         if(str[i] == '-' && flag)
13             s[j++] = str[i];
14         if((str[i] >= '0' && str[i] <= '9') || (str[i]) >= 'a' && str[i] <= 'f' || (str[i] >= 'A' && str[i] <= 'F'))
15         {
16             s[j++] = str[i];
17             flag = 0;
18         }
19     }
20     if(s[0] != '-')
21         for(i = j - 1; i >= 0; i--)
22         {
23             if(s[i] >= '0' && s[i] <= '9')
24                 sum += (s[i] - '0') * pow(16, j - 1 - i);
25             else if(s[i] >= 'a' && s[i] <= 'f')
26                 sum += (s[i] - 'a' + 10) * pow(16, j - 1 - i);
27             else if(s[i] >= 'A' && s[i] <= 'F')
28                 sum += (s[i] - 'A' + 10) * pow(16, j - 1 - i);
29         }
30     else
31     {
32         for(i = j - 1; i > 0; i--)
33         {
34             if(s[i] >= '0' && s[i] <= '9')
35                 sum += (s[i] - '0') * pow(16, j - 1 - i);
36             else if(s[i] >= 'a' && s[i] <= 'f')
37                 sum += (s[i] - 'a' + 10) * pow(16, j - 1 - i);
38             else if(s[i] >= 'A' && s[i] <= 'F')
39                 sum += (s[i] - 'A' + 10) * pow(16, j - 1 - i);
40         }
41         sum = -sum;
42     }
43     printf("%d
", sum);
44     return 0;
45 }
原文地址:https://www.cnblogs.com/yomman/p/4237733.html