蓝桥杯试题 基础练习 十六进制转十进制(75分的来)

问题描述

  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。

样例输入

FFFF

样例输出

65535

 实现代码:

#include<stdio.h>
#include<math.h>
#include<string.h>
using namespace std;

int main()
{
	int n,i,j,a[100010];
	char c[100010];
	

	
		double sum=0;
		int r=1,t=0;
		scanf("%s",c);
		for(i=strlen(c)-1;i>=0;i--)
		{
			if(c[i] >= 'A'  && c[i] <= 'F')
		{
			sum += (c[i] - 'A'+10)*pow(16,t++); //默认pow的返回值是double型
	    }  
		else
		{
			sum += (c[i] - '0')*pow(16,t++);
		}
		
		}
		printf("%.0lf\n",sum);
    
    return 0;
}

75分原因分析:

sum刚开始我用的int 定义了,提交了75分。之后改成long long 我测试了一下FFFFFFFF(8F)这个数据,还是溢出

所以就用double,测试了一下不溢出提交就过了。

猜你喜欢

转载自blog.csdn.net/with_wine/article/details/114954392
今日推荐