LQ BASIC-11 十六进制转十进制

问题描述

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

样例输入

FFFF

样例输出

65535

思路

这是一道比较简单的题目,输入作为字符串处理,然后对每一位计算权值累加即可得到对应十进制数。

本题中提示,不超过八位数。也就是说FFFFFFFF是一个合法输入,若使用int或者long int类型,则该值无法被正确计算(输出为-1),所以计算时应采用double计算。

源码

#include<stdio.h>

double _16to10( char _16[] );
double Square( int BaseNumber, int Index  );

char _16s[100],_8s[100];

int main()
{
    int T,t;
    int _10 = 0;

    scanf("%s",_16s);
    printf("%.0lf\n",_16to10( _16s ));

    return 0;
}


double _16to10( char _16[] )
{
    double Value;
    int Length,i;
    char* p;

    //calculate the string's length
    for( p = _16; *p != '\0'; p++ )
        ;

    Length = p - _16;

    for( i = Length-1; i >= 0; i-- )
    {
        switch( _16[i] )
        {

            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
                        Value += ( _16[i] - '0' ) * Square( 16, Length - i - 1 );
                        break;

            case 'A':
            case 'B':
            case 'C':
            case 'D':
            case 'E':
            case 'F':
                        Value += ( 10 + ( _16[i] - 'A' ) ) * Square( 16, Length - i - 1 );
                        break;
        }
    }

    return Value;
}
//平方函数
double Square( int BaseNumber, int Index  )
{
    int i = 0;
    double Value = 1;

    for( i = 0; i < Index; i++ )
    {
        Value *= BaseNumber;
    }

    return Value;
}
    原文作者:进制转换
    原文地址: https://blog.csdn.net/mading0613/article/details/54706735
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞