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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM