输入一个以#结束的字符串,滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,输出该字符串并将其转换为十进制数后输出。
输入格式:
输入在一行中给出一个不超过80个字符长度的、以#结束的非空字符串。
输出格式:
第1行中输出已滤去所有非十六进制字符的字符串。
在第2行中输出转换后的十进制数。题目保证输出结果在长整型范围内。
输入样例:
-zy1+Ak0-bq?#
输出样例:
1A0b
6667
c++code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| #include<iostream> #include<math.h> using namespace std; int main(void){ char ch[100]; char temp; int i=0; while(1){ cin>>temp; if(temp=='#') break; if(isxdigit(temp)){ ch[i]=temp; i++; } } printf("%s\n",ch); int sum[i]; int andsum=0; for(int j=(i-1),k=0;j>=0;j--,k++){ if(isalpha(ch[j])){ if(isupper(ch[j])){ ch[j]=tolower(ch[j]); } sum[j]=ch[j]-'0'; sum[j]-=39; }else{ sum[j]=ch[j]-'0'; } andsum+=(sum[j]*pow(16,k)); } cout<<andsum<<endl; return 0; }
|
java Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import java.util.Scanner; public class Main { static void clect(String str) { int len = str.length(); String str1 = ""; for (int i = 0; i < len; i++) { if ((str.charAt(i) >= '0' && str.charAt(i) <= '9') || ((str.charAt(i) >= 'a' && str.charAt(i) <= 'f') || (str.charAt(i) >= 'A' && str.charAt(i) <= 'F'))) { str1 += str.charAt(i); } } System.out.println(str1); System.out.print(Long.parseLong(str1, 16)); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); int num = str.indexOf('#'); if (str.length() > 80) return; str = str.substring(0, num); clect(str); } }
|