输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
输入在一行中给出一个以#结束的非空字符串。
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
+-P-xf4+-1!#
-3905
- #include<stdio.h>
-
- int huan(char s[100]){//将十六进制转换为十进制的函数
- int i=0,sum=0,n;
- while(s[i]!='#'){
- if(s[i]=='A' || s[i]=='a'){
- n=10;
- sum=sum*16+n;
- }
- else if(s[i]=='B' || s[i]=='b'){
- n=11;
- sum=sum*16+n;
- }
- else if(s[i]=='C' || s[i]=='c'){
- n=12;
- sum=sum*16+n;
- }
- else if(s[i]=='D' || s[i]=='d'){
- n=13;
- sum=sum*16+n;
- }
- else if(s[i]=='E' || s[i]=='e'){
- n=14;
- sum=sum*16+n;
- }
- else if(s[i]=='F' || s[i]=='f'){
- n=15;
- sum=sum*16+n;
- }
- else if(s[i]>='0'&&s[i]<='9'){
- n=s[i]-'0';//注意这里,因为这里是字符,所以必须减掉'0'才是数字的值
- sum=sum*16+n;
- }
- i++;
- }
- return sum;
- }
-
- int zhangfu(char s[100]){
- int i=0,flag=1;
- while(s[i]!='/0'){
- if(s[i]>='A'&&s[i]<='F' || s[i]>='a'&&s[i]<='f'){
- break;//如果先检测到指定字符,直接返回flag=1
- }
- if(s[i]=='-'){//如果先检测到负号,则返回flag=-1
- flag=-1;
- }
- i++;
- }
- return flag;
- }
- int main(){
- char s[100];
- gets(s);
- int flag=zhangfu(s);
- int sum=huan(s);
- printf("%d",flag*sum);
- return 0;
- }
- #include<stdio.h>
- #include<string.h>
- int main(){
- int flag,i=0,j,sum=0;
- char s[100];
- gets(s);
- while(s[i]!='#'){
- if(s[i]=='-'){
- flag=-1;
- break;
- }
- if((s[i]>='1'&&s[i]<='9') || (s[i]>='A'&&s[i]<='F') || (s[i]>='a'&&s[i]<='f')){
- flag=1;
- break;
- }
- i++;
- }
- i=0;
- while(s[i]!='#'){
- if(s[i]>='1'&&s[i]<='9'){
- sum=sum*16+(s[i]-'0');
- }
- else if(s[i]=='a' || s[i]=='A'){
- sum=sum*16+10;
- }
- else if(s[i]=='b' || s[i]=='B'){
- sum=sum*16+11;
- }
- else if(s[i]=='c' || s[i]=='C'){
- sum=sum*16+12;
- }
- else if(s[i]=='d' || s[i]=='D'){
- sum=sum*16+13;
- }
- else if(s[i]=='e' || s[i]=='E'){
- sum=sum*16+14;
- }
- else if(s[i]=='f' || s[i]=='F'){
- sum=sum*16+15;
- }
- i++;
- }
- printf("%d",sum*flag);
- return 0;
- }