10转16,16转10

 

 

#include <stdio.h> 

#define N 8 

void tran(int num,int k) 

    int arr[N],i; 

    for (i=0;i <N;i++) 

    { 

        arr[i]=num%k; 

        num=num/k; 

        if (num==0) 

            break; 

    } 

    printf("转换为%d进制数为: ",k); 

    for (;i>=0;i--) 

        switch (arr[i]) 

        { 

        case 10: printf("A");break; 

        case 11: printf("B");break; 

        case 12: printf("C");break; 

        case 13: printf("D");break; 

        case 14: printf("E");break; 

        case 15: printf("F");break; 

        default: printf("%d",arr[i]); 

        } 

    printf("/n/n/n"); 

void main() 

    int num,choo; 

loop:    printf("请选择功能:0.退出  1.十进制转二进制  2.十进制转八进制  3.十进制转十六进制/n"); 

        scanf("%d",&choo); 

        switch (choo) 

        { 

        case 1: 

            printf("请输入要转换的十进制数:"); 

            scanf("%d",&num); 

            tran (num,2); 

            goto loop; 

        case 2: 

            printf("请输入要转换的十进制数:"); 

            scanf("%d",&num); 

            tran (num,8); 

            goto loop; 

        case 3: 

            printf("请输入要转换的十进制数:"); 

            scanf("%d",&num); 

            tran (num,16); 

            goto loop; 

        case 0:break; 

        default : 

            printf("输入有误!请重新输入!/n"); 

            goto loop; 

        } 

}

——————————————————————————————————————————————————————

 

/*

输入一个字符串,如:H1AX-B2.8Y?302,将其中连续的十六进制数字字符串转换成等价的十进制一次存放到一个数组a中。如1A转换成26放在a[1],-B2.8转换成-178.5放在a[2],……统计共有多少个数,并输出这些数。(假设所有转换后的数都在实数范围内)。

刚刚忘了小数点~~*/ 

#include <stdio.h>

#include <math.h>

#include <string.h>

#define MAXSIZE 20   /*串最大长度*/

#define RADIX 16   /*基数*/

int main()

{

 char source[MAXSIZE]; 

 float result[MAXSIZE/2] = {0}; /*数组长度不会超过串长度的一半*/

 int sign = 1; /*正负号*/

 int precision = -1; /*小数位数*/

 int i,j;

 gets(source);

 printf("%s/n",source);

 for(i=0, j=0;i<=strlen(source); i++)

 {

  switch(source[i]) /*可以使用if语句替换但这样效率更高*/

  {

   case '.':

    precision = 0;

    break;

   case '0':

   case '1':

   case '2':

   case '3':

   case '4':

   case '5':

   case '6':

   case '7':

   case '8':

   case '9': /*计算结果*/

    if(precision != -1)

     precision++;

     result[j] = result[j] * RADIX +(source[i]-'0');

    break;

   case 'A': /*如果愿意可以加上小写字母的判断*/

   case 'B':

   case 'C':

   case 'D':

   case 'E':

   case 'F': /*计算结果*/

    if(precision != -1)

     precision++;

    result[j] = result[j] * RADIX +(source[i]-'A'+10);

    break;

   default: /*结果有两种情况零的情况需要额外判断*/

    if(precision != -1)

     result[j] /= pow(float(RADIX),precision);

    if(((fabs(result[j]) <= 0.000001)&&(source[i-1] == '0'))||(fabs(result[j]) > 0.000001))

    {

     result[j] *= sign;

     printf("%f/n",result[j]);

     j++;

    } 

    precision = -1;

    if(source[i] == '-')

     sign=-1;

    else

     sign=1;

    break;

  }

 }

 getchar();

 return 0;

}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值