zoukankan      html  css  js  c++  java
  • 【程序练习】——十进制的转换

    十进制转换八进制,二进制,十六进制:

      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 #include<string.h>
      4 
      5 #define MAX 20
      6 
      7 int bin_val[MAX];            //存放十进制转换成二进制的结果
      8 
      9 int  get_int()
     10 {
     11     int in;
     12     while(scanf("%d",&in) == -1){
     13         printf("please input a num
    ");
     14         while(getchar() != '
    ') ;
     15     }
     16 
     17     while(getchar() != '
    ') ;
     18     return in;
     19 }
     20 
     21 int menue()
     22 {
     23     int item;
     24     printf("**********************************
    ");
     25     printf("1.decimal converted into a binary;
    ");
     26     printf("2.decimal converted to a hexadecimal;
    ");
     27     printf("3.decimal converted into octal;
    ");
     28     printf("4.exit the system;
    ");
     29     printf("**********************************
    ");
     30 
     31     printf("please input a number you want to do
    ");
     32 
     33     while(item = get_int(),item < 1 || item >  4){        //逗号表达式
     34         printf("please input [1-4]
    ");
     35     }
     36     return item;
     37 }
     38 
     39 int com_conver_binary()            //转换成二进制的通用函数,为了十进制转换成十六进制做准备
     40 {
     41     int value;                    //需要转换的值
     42     
     43     int mod;                    //余数
     44     int i = 0;                        //记录二进制的位数
     45     printf("please input a num you want to conver :
    ");
     46     value = get_int();
     47 
     48     while((mod = value % 2), (value /= 2) != 0){        //十进制转换二进制
     49         bin_val[i++] = mod;
     50     }
     51     bin_val[i++] = mod;        //当value等于零的时候循环已经终止,但是余数还未加到结果中,so......
     52     
     53     return i;
     54 }
     55 
     56 /*****转换八进制和二进制的函数可以通用的,*****/
     57 void conver_octal()                //转换成八进制            
     58 {
     59     int value;                    //需要转换的值
     60     
     61     int mod;                    //余数
     62     int i = 0;                        //记录八进制的位数
     63     printf("please input a num you want to conver :
    ");
     64     value = get_int();
     65 
     66     while((mod = value % 8), (value /= 8) != 0){        //十进制转换八进制
     67         bin_val[i++] = mod;
     68     }
     69     bin_val[i++] = mod;        //当value等于零的时候循环已经终止,但是余数还未加到结果中,so......    
     70 
     71     while(i--)
     72         printf("%d",bin_val[i]);
     73 
     74     puts("
    ");
     75 }
     76 
     77 void conver_binary()            //转换成二进制
     78 {
     79     int i;
     80     i = com_conver_binary();
     81 
     82     while(i--)
     83         printf("%d",bin_val[i]);
     84 
     85     puts("
    ");
     86 }
     87 
     88 char hex_ch(int value)
     89 {
     90     char ch;
     91     switch(value){
     92     case 0:
     93     case 1:
     94     case 2:
     95     case 3:
     96     case 4:
     97     case 5:
     98     case 6:
     99     case 7:
    100     case 8:
    101     case 9: ch = value + '0'; break;
    102     case 10: ch = 'A'; break;
    103     case 11: ch = 'B'; break;
    104     case 12: ch = 'C'; break;
    105     case 13: ch = 'D'; break;
    106     case 14: ch = 'E'; break;
    107     case 15: ch = 'F'; break;
    108     }
    109     return ch;
    110 }
    111 
    112 void conver_hex()            //转换成十六进制
    113 {
    114     char hex_val[MAX];        //由于十六进制中有字母,所以要用char型
    115     int bin_bit;        //十进制转换成二进制的位数
    116     int hex_bit = 0;        //十六进制的结果位数
    117     int i;
    118 
    119     int sum = 0;        //四位的二进制的十进制和
    120     bin_bit = com_conver_binary();                //十进制先转换成二进制
    121 
    122     for(i = 0; i < bin_bit; i++){                //二进制转换成十六进制
    123         switch(i % 4){
    124         case 0: sum += (bin_val[i] * 1); break;
    125         case 1: sum += (bin_val[i] * 2); break;
    126         case 2: sum += (bin_val[i] * 4); break;
    127         case 3: sum += (bin_val[i] * 8); break;
    128         }
    129         if(i % 4 == 3){
    130             hex_val[hex_bit++] = hex_ch(sum);
    131             sum = 0;
    132         }
    133     }
    134     if(bin_bit % 4 != 0)
    135         hex_val[hex_bit++] = hex_ch(sum);                //一定不能忘记,如果二进制的位数不是四的倍数,就需要此部分
    136 
    137     while(hex_bit--)
    138         printf("%c",hex_val[hex_bit]);
    139 
    140     puts("
    ");
    141 }
    142 
    143 int main()
    144 {
    145     while(1){
    146         switch(menue()){
    147         case 1:conver_binary(); break;
    148         case 2:conver_hex(); break;
    149         case 3:conver_octal(); break;
    150         case 4:exit(0); break;
    151         }
    152     }
    153 }
  • 相关阅读:
    PostgreSQL Replication之第四章 设置异步复制(4)
    PostgreSQL Replication之第四章 设置异步复制(3)
    PostgreSQL Replication之第四章 设置异步复制(2)
    PostgreSQL Replication之第四章 设置异步复制(1)
    PostgreSQL Replication之第三章 理解即时恢复(4)
    Hdu3065 病毒侵袭持续中
    poj3974 Palindrome
    poj1204 Word Puzzles
    Hdu2222 Keywords Search
    Codeforce 633.C Spy Syndrome 2
  • 原文地址:https://www.cnblogs.com/ngnetboy/p/3339610.html
Copyright © 2011-2022 走看看