我是靠谱客的博主 潇洒小懒虫,最近开发中收集的这篇文章主要介绍字符串转换成十进制整数(1-72) ---进制转换字符串转换成十进制整数(1-72) —进制转换,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

字符串转换成十进制整数(1-72) —进制转换

题目描述:

输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。

输入:

输入在一行中给出一个以#结束的非空字符串。

输出:

在一行中输出转换后的十进制数。题目保证输出在长整型范围内。

输入样例:

+-P-xf4+-1!#

输出样例:

-3905

题目来源:

ECNU_DASE_OJ_1-72

思路/题点:

  1. 在输入字符串的过程中判断是否是合法的16进制字符,如果是放入字符串中,否则不做处理。
  2. 要处理正负号:用两个判断标记,如果该字符属于16进制字符,标记flag1=true,表示转换数大于0,如果不属于16进制字符但等于‘-’,就判断flag1是否为true,如果flag1为fasle代表第一个16进制字符前存在‘-’。如果flag1和flag2同时为true就输出‘-’。
  3. 在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) —进制转换所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部