字符串轉換成十進制整數


輸入一個以#結束的字符串,本題要求濾去所有的非十六進制字符(不分大小寫),組成一個新的表示十六進制數字的字符串,然后將其轉換為十進制數后輸出。如果在第一個十六進制字符之前存在字符“-”,則代表該數是負數。

輸入格式:

輸入在一行中給出一個以#結束的非空字符串。

輸出格式:

在一行中輸出轉換后的十進制數。題目保證輸出在長整型范圍內。

輸入樣例:

+-P-xf4+-1!#

輸出樣例:

-3905

代碼如下:
      
#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std;


int main()
{
	char a[1000];
	gets(a);
	int temp=0;
	char b[10000];
	int sum=0;
	int i,j=0;;
	for(i=0;i<strlen(a);i++)
	{
		if(a[i]=='-' && temp==0 && j==0)
		   	   temp=1;
		else
		{
			if(a[i]>='a' && a[i]<='f' || a[i]>='A' && a[i]<='F')
			    {
			    	b[sum++]=a[i];
					j++;
			    } 
			if(a[i]>='0' && a[i]<='9')
			    b[sum++]=a[i];
		}
	}
	b[sum]='\0';
	int sum1=sum-1;
	int sum2=sum1;
	int c[1000];
	for(i=0;i<sum;i++)
	{
		if(b[i]>='0' && b[i]<='9')
		  c[sum1--]=b[i]-'0';
		else
		{
			if(b[i]>='a' && b[i]<='f')
			 c[sum1--]=b[i]-'a'+10;
			else
			 if(b[i]>='A' && b[i]<='F')
			  c[sum1--]=b[i]-'A'+10;
		}

	}
	long long int sum3=0;
	for(i=0;i<=sum2;i++)
	{
		 int sum4=1;
	     for(int j=1;j<=i;j++)
		 	sum4 = sum4*16; 
		 sum3+=sum4*c[i];		  
	}
	if(temp==1 && sum3!=0)
	   printf("-");
	printf("%lld\n",sum3);
	return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM