十六进制转十进制

Description
输入一个以回车符结束的字符串(少于80个字符),过滤去所有的非十进制字符后(不区分大小写),组成一个新字符串(十六进制形式),然后将其转换为十进制数后输出。
Input
多组测试数据,每组输入一个以回车结束的字符串(少于80个字符)。
Output
转换后的十进制数
Sample Input
ABXYZ12
EF8GH4I
Sample Output
43794
61316
抄的,之后看看能不能搞个简单点的

法一:

#include <stdio.h>
#include <string.h>//用到了字符串长度strlen要加头文件。
#include <math.h>
int main()
{
    char c[100];
    char a[1];
    int t;
    while(scanf("%c",&a[0])!=EOF)
    {
        gets(c);//代表c【100】全部输入
        int sum=0,i,len,d=0,num;
        len=strlen(c);//strlen从内存的某个位置(可以是字符串开头,中间某个位置,
        //甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束 
         //符'\0'为止,然后返回计数器值(长度不包含'\0')。
        //头文件:string.h或cstring
        //格式:strlen (字符数组名)
        //功能:计算给定字符串的(unsigned int型)长度,不包括'\0'在内
       //说明:返回s的长度,不包括结束符NULL。
        for(i=len-1;i>=0;i--)//这种算法从各位开始算,所以是i++
        {
            if(c[i]>='0'&&c[i]<='9')
            {
                num=(c[i]-'0')*pow(16,d);//一开始d是0, *16的d次方就是*1
                d++;//个位*0次方,后面位数增加
            }
            else if(c[i]>='a'&&c[i]<='f')
            {
                num=(c[i]-'a')*pow(16,d);
                d++;
            }
            else if(c[i]>='A'&&c[i]<='F')
            {
                num=(c[i]-'A')*pow(16,d);
                d++;
            }
            else
            {
                num=0;
            }
            sum+=num;
        }
        if(a[0]>='0'&&a[0]<='9')
            {
                num=(a[0]-'0')*pow(16,d);
                d++;
            }
            else if(a[0]>='a'&&a[0]<='f')
            {
                num=(a[0]-87)*pow(16,d);
                d++;
            }
            else if(a[0]>='A'&&a[0]<='F')
            {
                num=(a[0]-55)*pow(16,d);
                d++;
            }
            else
            {
                num=0;
            }
            sum+=num;
        printf("%d\n",sum);
    }
    return 0;
}

法2:
只提供一个思路:
倒着计数,利用number=number*16+a【i】-‘0’或’a’或’A’,书上有,自己看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值