ブルーブリッジカップテストの質問基本的な練習16進数から10進数(75ポイント)

問題の説明

  キーボードから8桁以下の正の16進数文字列を入力し、正の10進数に変換して出力します。
  注:16進数の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分原因分析:

最初は、intを使用して合計を定義し、75ポイントを送信しました。次に、long longに変更しました。FFFFFFFF(8F)データをテストしましたが、それでもオーバーフローしました

したがってdoubleを使用してテストし、オーバーフローせずに送信してください。

おすすめ

転載: blog.csdn.net/with_wine/article/details/114954392