一、十六进制转十进制

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

 

分析:按16进制展开;按数位依次操作,每次将前面的乘16,再加上当前数位的值。

C语言代码

#include<stdio.h>  
#include<string.h>  
#include<math.h>  
int main(){  
     char strHex[10]; //设定字符串长度 
     int i = 0, len = 0, temp = 0;  
     long long answer = 0;  
     gets(strHex);  
     len = strlen(strHex);  
     for (i = 0; strHex[i] != '\0'; ++i){  
         switch(strHex[i]){  
             case 'A': temp = 10; break;  
             case 'B': temp = 11; break;  
             case 'C': temp = 12; break;  
             case 'D': temp = 13; break;  
             case 'E': temp = 14; break;  
             case 'F': temp = 15; break;  
             default: temp = strHex[i]-'0'; break;  
         }  
         answer += (temp*pow(16,len-1-i));  //pow函数作用:计算x的 y次方 
     }  
     printf("%lld",answer);  
     return 0;  
}

 

C++代码

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s;
    while(cin>>s)
    {
        int leth=s.length();
        long long sum=0;
        for(int i = 0;i < leth;i++)
        {
            if(s[i]>='A' && s[i]<='F')
                sum=sum*16 + s[i]-'A'+10;
            else
                sum=sum*16 + s[i]-'0';
        }
        cout<<sum<<endl;
    }
    return 0;
}

 

二、十六进制转八进制

问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
  输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
  输出n行,每行为输入对应的八进制正整数。
注意
  输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
提示
  先将十六进制数转换成某进制数,再由某进制数转换成八进制。

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MaxSize 100000

void saveB(char *b,char c3,char c2,char c1,char c0,int start)
{
    b[start]=c3;
    b[start+1]=c2;
    b[start+2]=c1;
    b[start+3]=c0;
}
int htob(char *h,char *b)
{
    int i,j;
    int hl=strlen(h);
    for(i=0;i<hl;i++)
        switch(h[i])
        {
            case '0':
                {
                    saveB(b,'0','0','0','0',4*i);
                    break;
                }
            case '1':
                {
                    saveB(b,'0','0','0','1',4*i);
                    break;
                }
            case '2':
                {
                    saveB(b,'0','0','1','0',4*i);
                    break;
                }
            case '3':
                {
                    saveB(b,'0','0','1','1',4*i);
                    break;
                }
            case '4':
                {
                    saveB(b,'0','1','0','0',4*i);
                    break;
                }
            case '5':
                {
                    saveB(b,'0','1','0','1',4*i);
                    break;
                }
            case '6':
                {
                    saveB(b,'0','1','1','0',4*i);
                    break;
                }
            case '7':
                {
                    saveB(b,'0','1','1','1',4*i);
                    break;
                }
            case '8':
                {
                    saveB(b,'1','0','0','0',4*i);
                    break;
                }
            case '9':
                {
                    saveB(b,'1','0','0','1',4*i);
                    break;
                }
            case 'A':
                {
                    saveB(b,'1','0','1','0',4*i);
                    break;
                }
            case 'B':
                {
                    saveB(b,'1','0','1','1',4*i);
                    break;
                }
            case 'C':
                {
                    saveB(b,'1','1','0','0',4*i);
                    break;
                }
            case 'D':
                {
                    saveB(b,'1','1','0','1',4*i);
                    break;
                }
            case 'E':
                {
                    saveB(b,'1','1','1','0',4*i);
                    break;
                }
            case 'F':
                {
                    saveB(b,'1','1','1','1',4*i);
                    break;
                }
        }
    return 4*hl;
}

int btoo(char *b,char *o,int bl)
{
    int i,j;
    int ol;
    int value;
    if(bl%3==0)
        ol=bl/3;
    else
        ol=bl/3+1;
    j=bl-1;
    for(i=ol-1;i>=0;i--)
    {
        if(i>0)
            o[i]=b[j]-48+(b[j-1]-48)*2+(b[j-2]-48)*4+48;
        else
        {
            switch(j)
            {
                case 2:
                    o[i]=b[j]-48+(b[j-1]-48)*2+(b[j-2]-48)*4+48;
                    break;
                case 1:
                    o[i]=b[j]-48+(b[j-1]-48)*2+48;
                    break;
                case 0:
                    o[i]=b[j];
                    break;
            }

        }
        j=j-3;
    }
    return ol;
}
void printO(char *o,int ol)
{
    int i=0;
    if(o[0]=='0')
        i=1;
    for(;i<ol;i++)
    {
        printf("%c",o[i]);
    }
    printf("\n");
}

main()
{
    char h[MaxSize];
    char b[4*MaxSize];
    char o[4*MaxSize/3+1];
    int n,i,bl,ol;
    scanf("%d",&n);
    getchar();
    for(i=0;i<n;i++)
    {
        gets(h);
        bl=htob(h,b);
        ol=btoo(b,o,bl);
        
        printO(o,ol);
    }
}
C语言

相关文章: