码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-01-21 01:10:28      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:

数组-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\n", sum);
44     return 0;
45 }

 

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

标签:

原文地址:http://www.cnblogs.com/yomman/p/4237733.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!