我是靠谱客的博主 潇洒小懒虫,最近开发中收集的这篇文章主要介绍字符串转换成十进制整数(1-72) ---进制转换字符串转换成十进制整数(1-72) —进制转换,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
字符串转换成十进制整数(1-72) —进制转换
题目描述:
输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
输入:
输入在一行中给出一个以#结束的非空字符串。
输出:
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
输入样例:
+-P-xf4+-1!#
输出样例:
-3905
题目来源:
ECNU_DASE_OJ_1-72
思路/题点:
- 在输入字符串的过程中判断是否是合法的16进制字符,如果是放入字符串中,否则不做处理。
- 要处理正负号:用两个判断标记,如果该字符属于16进制字符,标记flag1=true,表示转换数大于0,如果不属于16进制字符但等于‘-’,就判断flag1是否为true,如果flag1为fasle代表第一个16进制字符前存在‘-’。如果flag1和flag2同时为true就输出‘-’。
- 在16进制转换为10进制的过程中,遇到字符a-f和A-F如何处理呢,要转换成对应的数字代入运算,还要制定转换规则,区分大小写字母。因为只有12个字母要转成数字所以用简单粗暴的switch语句处理了。然后还有在输入的时候的数字是字符,进制运算时要用数字,转换规则为‘数字’-‘0’=数字。
题解代码
纯C语言(OJ只给了C语言提交方式)
#include<stdio.h>
char str[10010];
int JudeIsH(char n){
if(n>='0' && n<='9' || n>='A' && n<='F' || n>='a' && n<='f')
return 1;
else
return 0;
}
int main(){
char c;
long long n=0;
int flag1=0;
int flag2=0;
int la=0;
while(~scanf("%c",&c) && c!='#'){
if(JudeIsH(c))
{
str[la++]=c;
flag1=1;
}
else if(c=='-' && !flag1)
flag2=1;
}
if(flag2 && flag1)//负号的处理
printf("-");
int product =1;
for(int i=la-1;i>=0;i--){
switch(str[i])//处理各字符转成对应数字
{
case 'A':
case 'a': str[i]=10;break;
case 'B':
case 'b': str[i]=11;break;
case 'C':
case 'c': str[i]=12;break;
case 'D':
case 'd': str[i]=13;break;
case 'E':
case 'e': str[i]=14;break;
case 'F':
case 'f': str[i]=15;break;
default: str[i]-='0';break;
}
n+=str[i]*product;
product*=16;
}
printf("%lld",n);
return 0;
}
C++代码
与C语言不同的地方:使用了bool类型,使用了vector容器,因为vector支持基本操作的方法。
#include<cstdio>
#include<vector>
using namespace std;
bool JudeIsH(char n){
if(n>='0' && n<='9' || n>='A' && n<='F' || n>='a' && n<='f')
return true;
else
return false;
}
int main(){
char c;
vector<char> v;
long long n=0;
bool flag1=false;
bool flag2=false;
while(~scanf("%c",&c) && c!='#'){
if(JudeIsH(c))
{
v.push_back(c);
flag1=true;
}
else if(c=='-' && !flag1)
flag2=true;
}
if(flag1 && flag2)
printf("-");
int product =1;
for(int i=v.size()-1;i>=0;i--){
switch(v[i]){
case 'A':
case 'a': v[i]=10;break;
case 'B':
case 'b': v[i]=11;break;
case 'C':
case 'c': v[i]=12;break;
case 'D':
case 'd': v[i]=13;break;
case 'E':
case 'e': v[i]=14;break;
case 'F':
case 'f': v[i]=15;break;
default: v[i]-='0';break;
}
n+=v[i]*product;
product*=16;
}
printf("%lld",n);
return 0;
}
最后
以上就是潇洒小懒虫为你收集整理的字符串转换成十进制整数(1-72) ---进制转换字符串转换成十进制整数(1-72) —进制转换的全部内容,希望文章能够帮你解决字符串转换成十进制整数(1-72) ---进制转换字符串转换成十进制整数(1-72) —进制转换所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复