输入一个以#结束的字符串,滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,输出该字符串并将其转换为十进制数后输出。
输入格式:
输入在一行中给出一个不超过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'))) //判断每个字符是否为16进制数
{
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);//从截取字符串0开始到#
clect(str);
}
}