十六进制转十进制(包含十转二)(C语言版)(未完全AC)

 先上代码

#include <stdio.h>
#include <string.h>
#include <math.h>
int sixteen_to_ten(char a[])
{
    long long int i,j=0,k=(int)strlen(a);
    long long int d;
    d=0;
    for (k=(int)strlen(a); k>0; k--)
    {
        if((int)a[k-1]>=(int)'0' && (int)a[k-1]<=(int)'9')
        {
            float b=pow(16,j);
            long long int c=(int)b;
            d=d+((int)a[k-1]-(int)'0')*c;
        }
        else
        {
            d=d+(((int)a[k-1]-(int)'A')+10)*(int)pow(16,j);
        }
        j=j+1;
    }
    return d;
}
void ten_to_two(int x)
{
    int i=0,j=0;
    static int a[1000];
    while(x)
    {
        a[i++]=x%2;
        x=x/2;
    }
    printf("二进制为:");
    for( ; i>0; i--)
    {
        printf("%d",a[i-1]);
    }
}
int main()
{
    long long int sum=0;
    char a[1000];
    scanf("%s",&a);
    sum=sixteen_to_ten(a);
    printf("%d\n",sum);
    ten_to_two(sum);
    return 0;
}

不知道出了什么问题只通过75%另外那个需要VIP权限才能看。

推测是因为数据过大的原因,或者精度遗失。 更偏向于数据过大。欢迎各位大佬指正。

 代码思路很简单,十六进制数要转化成十进制数,因为十六进制中有ABCDEF来分别代表10-15.所以肯定需要用字符串的形式进行输入,然后就需要对字符串进行进制转换处理,进制转换成十进制的方法很简单,比如1234567(十六进制)转换成十进制,十进制就等于7 * 16^0+6 * 16*1 +5 * 16^2.....一直依次次方数递增直到最后一个数。但是注意这里是字符串形式,每个数据都是字符形式,很明显我们就需要动用ASCII码进行转换操作。ASCII表见下图,完整图表可见菜鸟教程。

 明显可见红色部分,存在数字和字母,那么我们只需要将相应字符对应的ASCII码值相减就可以得到一个数字,假设现在这个字符是5那么我们用其对应的十进制码值减去0对应的十进制码值就可以得到5,就是原本的数字大小,同理字母也可以如此计算比如字符F,用其码值减去A的码值就会得到5,再加上10就可以表示十六进制中的15,同样可以用此方法来判定是不是字母还是数字,字母的ASCII码值较大与0的码值相减不可能在10的范围内就可以通过这样判定是否是数字。

接下来就只需要做一个循环来模拟进制转换过程即可。

接下来说说十进制转二进制。这个更简单只需要用10进制数不停的用2取余保存余数即可。代码很简单直接用while循环一直模拟操作就可。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值