首先说一下,是PTA上面的题目的答案(纯自己做)
题目如下:
7-1十二进制字符串转换成十进制整数 (10 分)
输入一个以#结束的字符串,要求滤去所有的非十二进制字符(不分大小写),组成一个新的表示十二进制数字的字符串,然后将其转换为十进制数后输出。题目保证输出在长整型范围内。
输入格式:
输入在一行中给出一个以#结束的非空字符串。
输出格式:
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
输入样例:
+P-xf1+a-4!B#
结尾无空行
输出样例:
3227
#include <stdio.h>
int main()
{
int c=0,d=0,e=0;
char a[80],b[80];
for(;;c++){
a[c]=getchar();
if(a[c]=='#'){
break;
}
}
a[c]='\0';
for(c=0;;){
if(a[c]=='\0'){
break;
}
if(a[c]>='0'&&a[c]<='9'||a[c]=='A'||a[c]=='B'||a[c]=='a'||a[c]=='b'){
b[d]=a[c];
d++;
}
c++;
}
b[d]='\0';
for(c=0;b[c]!='\0';c++){
if(b[c]>='0'&&b[c]<='9'){
e=e*12+b[c]-'0';
}
if(b[c]=='B'||b[c]=='A'){
e=e*12+b[c]-'A'+10;
}
if(b[c]=='a'||b[c]=='b'){
e=e*12+b[c]-'a'+10;
}
}
printf("%ld\n",e);
return 0;
}
然后我说说我对这题的看法,我觉得这个题目是存在一定的问题的
就比如这个图片,我在百度百科找到的,
如果得到pta题目调试的3227,就必须把a读进去,但是为什么小x不读呢,我感到很疑惑,希望同志们能给我一些帮忙。
所以,我刚开始做的代码是这样的:
#include <stdio.h>
int main()
{
int c=0,d=0,e=0;
char a[80],b[80];
for(;;c++){
a[c]=getchar();
if(a[c]=='#'){
break;
}
}
a[c]='\0';
for(c=0;;){
if(a[c]=='\0'){
break;
}
if(a[c]>='0'&&a[c]<='9'||a[c]=='A'||a[c]=='B'||a[c]=='a'||a[c]=='b'||a[c]=='X'||a[c]=='x'||a[c]=='E'||a[c]=='e'){
b[d]=a[c];
d++;
}
c++;
}
for(c=0;b[c]!='\0';c++){
putchar(b[c]);
}
printf("\n");
b[d]='\0';
for(c=0;b[c]!='\0';c++){
if(b[c]>='0'&&b[c]<='9'){
e=e*12+b[c]-'0';
}
if(b[c]=='B'||b[c]=='A'||b[c]=='X'||b[c]=='E'){
e=e*12+b[c]-'A'+10;
}
if(b[c]=='a'||b[c]=='b'||b[c]=='x'||b[c]=='e'){
e=e*12+b[c]-'a'+10;
}
}
printf("%ld\n",e);
return 0;
}
那个中间的putchar是为了我检查b[c]里面到底存进了什么。