Chinaunix首页 | 论坛 | 博客
  • 博客访问: 56255
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-11 14:33
文章分类

全部博文(31)

文章存档

2014年(31)

我的朋友

分类: PHP

2014-04-25 18:06:59

原文地址:C语言数制互相转化 作者:dyli2000

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. void D_B(int);
  5. void D_O(int);
  6. void D_X(int);
  7. void B_D(int);
  8. void B_O(int);
  9. void B_X(int);
  10. void O_B(int);
  11. void O_D(int);
  12. void O_X(int);
  13. void X_B(char r[],int k);
  14. void X_D(char r[],int k);
  15. void X_O(char r[],int k);
  16. void main()
  17. {
  18.  int i,j,k=0;
  19.  int q;
  20.  char r[10];
  21.  printf("+=============================================================+/n");
  22.  printf("| 欢 迎 使 用 进 制 转 换 程 序 |/n");
  23.  printf("+=============================================================+/n");
  24.  printf(" 注 : 本 版 本 只 做 正 整 数 的 进 制 转 换 ! !");
  25.  do
  26.  {
  27.   q=0;
  28.   //fflush(stdin);
  29.   printf("/n请选择需要被转换的进制:/n0、退出/n1、二进制/n2、八进制/n3、十进制/n4、十六进制/n");
  30.   scanf("%d",&i);
  31.   switch (i)
  32.   {
  33.    case 1: printf("/n请选择转换后的进制:/n0、退出/n1、二进制/n2、八进制/n3、十进制/n4、十六进制/n");
  34.      scanf("%d",&j);
  35.      switch(j)
  36.      {
  37.      case 1: printf("/n同进制之间不用转化!/n");
  38.        q=1;
  39.        break;
  40.      case 2: printf("/n请输入您想要转化的数:");
  41.        scanf("%d",&k);
  42.        B_O(k);
  43.        q=1;
  44.        break;
  45.      case 3: printf("/n请输入您想要转化的数:");
  46.        scanf("%d",&k);
  47.        B_D(k);
  48.        q=1;
  49.        break;
  50.      case 4: printf("/n请输入您想要转化的数:");
  51.        scanf("%d",&k);
  52.        B_X(k);
  53.        q=1;
  54.        break;
  55.      case 0:
  56.       
  57.        printf("谢谢使用!!");
  58.        
  59.      }
  60.      break;
  61.    case 2: printf("/n请选择转换后的进制:/n0、退出/n1、二进制/n2、八进制/n3、十进制/n4、十六进制/n");
  62.      scanf("%d",&j);
  63.      switch(j)
  64.      {
  65.      case 2: printf("/n同进制之间不用转化!/n");
  66.         q=1;
  67.        break;
  68.      case 1: printf("/n请输入您想要转化的数:");
  69.        scanf("%d",&k);
  70.        O_B(k);
  71.        q=1;
  72.        break;
  73.      case 3: printf("/n请输入您想要转化的数:");
  74.        scanf("%d",&k);
  75.        O_D(k);
  76.        q=1;
  77.        break;
  78.      case 4: printf("/n请输入您想要转化的数:");
  79.        scanf("%d",&k);
  80.        O_X(k);
  81.        q=1;
  82.        break;
  83.      case 0:
  84.        printf("谢谢使用!!");
  85.      }
  86.      break;
  87.    case 3: printf("/n请选择转换后的进制:/n0、退出/n1、二进制/n2、八进制/n3、十进制/n4、十六进制/n");
  88.      scanf("%d",&j);
  89.      switch(j)
  90.      {
  91.      case 3: printf("/n同进制之间不用转化!/n");
  92.         q=1;
  93.       
  94.        break;
  95.      case 1: printf("/n请输入您想要转化的数:");
  96.        scanf("%d",&k);
  97.        D_B(k);
  98.        q=1;
  99.        break;
  100.      case 2: printf("/n请输入您想要转化的数:");
  101.        scanf("%d",&k);
  102.        D_O(k);
  103.        q=1;
  104.        break;
  105.      case 4: printf("/n请输入您想要转化的数:");
  106.        scanf("%d",&k);
  107.        D_X(k);
  108.        q=1;
  109.        break;
  110.      case 0:
  111.       
  112.        printf("谢谢使用!!");
  113.      }
  114.      break;
  115.    case 4: printf("/n请选择转换后的进制:/n0、退出/n1、二进制/n2、八进制/n3、十进制/n4、十六进制/n");
  116.      scanf("%d",&j);
  117.      switch(j)
  118.      {
  119.      case 4: printf("/n同进制之间不用转化!/n");
  120.         q=1;
  121.        break;
  122.      case 1: printf("/n请输入您想要转化的数:");
  123.         fflush(stdin);
  124.         gets(r);
  125.         for(k=0;;k++)
  126.         {
  127.          if(r[k]=='/0')
  128.          break;
  129.         }
  130.        
  131.        X_B(r,k);
  132.        q=1;
  133.        break;
  134.      case 2: printf("/n请输入您想要转化的数:");
  135.        fflush(stdin);
  136.         gets(r);
  137.         for(k=0;;k++)
  138.         {
  139.          if(r[k]=='/0')
  140.          break;
  141.         }
  142.        
  143.        X_O(r,k);
  144.        q=1;
  145.        break;
  146.      case 3: printf("/n请输入您想要转化的数:");
  147.        fflush(stdin);
  148.         gets(r);
  149.         for(k=0;;k++)
  150.         {
  151.          if(r[k]=='/0')
  152.          break;
  153.         }
  154.        X_D(r,k);
  155.        q=1;
  156.        break;
  157.      case 0:
  158.       printf("谢谢使用!!");
  159.        
  160.      }
  161.      break;
  162.    case 0: printf("/n谢谢使用!/n");
  163.     
  164.   }
  165.  }while(q==1);
  166. }
  167.  ///////以下为: 二进制转换为十进制,八进制,十六进制.
  168. void B_D(int a)
  169. {
  170.  int i,s=0;
  171.  int result=0;
  172.  for(i=1;a!=0;i*=2)
  173.  {
  174.   if(a%10>1)
  175.   {
  176.    s=1;
  177.    break;
  178.   }
  179.   else
  180.   {
  181.    result+=(a%10)*i;
  182.    a=a/10;
  183.   }
  184.  }
  185.  if(s==1)
  186.   printf("您的输入有误!请重新输入/n");
  187.  else
  188.  printf("/n转换后的数为:%d/n",result);
  189. }

  190. void B_O(int a)
  191. {
  192.  int i,j,k,s=0;
  193.  int p[30];
  194.  int result=0;
  195.  for(i=1;a!=0;i*=2)
  196.  {
  197.   if(a%10>1)
  198.   {
  199.    s=1;
  200.    break;
  201.   }
  202.   else
  203.   {
  204.    result+=(a%10)*i;
  205.    a=a/10;
  206.   }
  207.  }
  208.  for(j=0;result!=0;j++)
  209.  {
  210.   p[j]=result%8;
  211.   result=result/8;
  212.  }
  213.  if(s==1)
  214.   printf("您的输入有误!请重新输入/n");
  215.  else
  216.  {
  217.   printf("/n转换后的数为:");
  218.   for(k=j-1;k>=0;k--)
  219.   {
  220.    printf("%d",p[k]);
  221.   }
  222.   printf("/n");
  223.  }
  224. }


  225. void B_X(int a)
  226. {
  227.  int i,j,k,s=0;
  228.  char p[30];
  229.  int result=0;
  230.  for(i=1;a!=0;i*=2)
  231.  {
  232.   if(a%10>1)
  233.   {
  234.    s=1;
  235.    break;
  236.   }
  237.   else
  238.   {
  239.    result+=(a%10)*i;
  240.    a=a/10;
  241.   }
  242.  }
  243.  for(j=0;result!=0;j++)
  244.  {
  245.   p[j]=result%16;
  246.   result=result/16;
  247.   if (p[j]>10)
  248.   {
  249.    switch(p[j])
  250.    {
  251.    case 10: p[j]='A';
  252.       break;
  253.    case 11: p[j]='B';
  254.       break;
  255.    case 12: p[j]='C';
  256.       break;
  257.    case 13: p[j]='D';
  258.       break;
  259.    case 14: p[j]='E';
  260.       break;
  261.    case 15: p[j]='F';
  262.       break;
  263.    }
  264.   }
  265.   else p[j]+=48;
  266.  }
  267.  if(s==1)
  268.   printf("您的输入有误!请重新输入/n");
  269.  else
  270.  {
  271.   printf("/n转换后的数为:");
  272.   for(k=j-1;k>=0;k--)
  273.   {
  274.    printf("%c",p[k]);
  275.   }
  276.   printf("/n");
  277.  }
  278. }
  279.  ///////以下为: 八进制转换为二进制,十进制,十六进制.
  280. void O_B(int a)
  281. {
  282.  int i,j,k,s=0;
  283.  int result=0;
  284.  int p[30];
  285.  for(i=1;a!=0;i*=8)
  286.  {if(a%10>7)
  287.   {
  288.    s=1;
  289.    break;
  290.   }
  291.   else
  292.   {
  293.    result+=(a%10)*i;
  294.    a=a/10;
  295.   }
  296.  }
  297.  for(j=0;result!=0;j++)
  298.  {
  299.   p[j]=result%2;
  300.   result=result/2;
  301.  }
  302.  if(s==1)
  303.   printf("您的输入有误!请重新输入/n");
  304.  else
  305.  {
  306.   printf("/n转换后的数为:");
  307.   for(k=j-1;k>=0;k--)
  308.   {
  309.    printf("%d",p[k]);
  310.   }
  311.   printf("/n");
  312.  }
  313. }

  314. void O_D(int a)
  315. {
  316.  int i,s=0;
  317.  int result=0;
  318.  for(i=1;a!=0;i*=8)
  319.  {
  320.   if(a%10>7)
  321.   {
  322.    s=1;
  323.    break;
  324.   }
  325.   else
  326.   {
  327.    result+=(a%10)*i;
  328.    a=a/10;
  329.   }
  330.  }
  331.  if(s==1)
  332.   printf("您的输入有误!请重新输入/n");
  333.  else
  334.  {
  335.   printf("/n转换后的数为:%d/n",result);
  336.  }
  337. }

  338. void O_X(int a)
  339. {
  340.  int i,j,k,s=0;
  341.  char p[30];
  342.  int result=0;
  343.  for(i=1;a!=0;i*=8)
  344.  {
  345.   if(a%10>7)
  346.   {
  347.    s=1;
  348.    break;
  349.   }
  350.   else
  351.   {
  352.    result+=(a%10)*i;
  353.    a=a/10;
  354.   }
  355.  }
  356.  for(j=0;result!=0;j++)
  357.  {
  358.   p[j]=result%16;
  359.   result=result/16;
  360.   if(p[j]<10)
  361.    p[j]+=48;
  362.   else
  363.   {
  364.    switch(p[j])
  365.    {
  366.    case 10: p[j]='A';
  367.       break;
  368.    case 11: p[j]='B';
  369.       break;
  370.    case 12: p[j]='C';
  371.       break;
  372.    case 13: p[j]='D';
  373.       break;
  374.    case 14: p[j]='E';
  375.       break;
  376.    case 15: p[j]='F';
  377.       break;
  378.    }
  379.   }
  380.  }
  381.  if(s==1)
  382.   printf("您的输入有误!请重新输入/n");
  383.  else
  384.  {
  385.   printf("/n转换后的数为:");
  386.   for(k=j-1;k>=0;k--)
  387.   {
  388.    printf("%c",p[k]);
  389.   }
  390.   printf("/n");
  391.  }
  392. }
  393.  ///////以下为: 十六进制转换为十进制,二进制,八进制.
  394. void X_D(char a[],int k)
  395. {
  396.  int i,j,s=0;
  397.  int result=0;
  398.  int b[50];
  399.  for(i=0;i<k;i++)
  400.  {
  401.   if(a[i]<='9'&&a[i]>='1')
  402.   { b[i]=a[i]-48;
  403.      
  404.   }
  405.   else
  406.   {
  407.    switch(a[i])
  408.    {
  409.    case 'A': b[i]=10;
  410.       break;
  411.    case 'B': b[i]=11;
  412.       break;
  413.    case 'C': b[i]=12;
  414.       break;
  415.    case 'D': b[i]=13;
  416.       break;
  417.    case 'E': b[i]=14;
  418.       break;
  419.    case 'F': b[i]=15;
  420.       break;
  421.    case 'a': b[i]=10;
  422.       break;
  423.    case 'b': b[i]=11;
  424.       break;
  425.    case 'c': b[i]=12;
  426.       break;
  427.    case 'd': b[i]=13;
  428.       break;
  429.    case 'e': b[i]=14;
  430.       break;
  431.    case 'f': b[i]=15;
  432.       break;
  433.    default: s=1;
  434.       
  435.    }
  436.    
  437.   }
  438.  }
  439.  for(i=1,j=k-1;j>=0;j--,i*=16)
  440.  {
  441.   result+=b[j]*i;
  442.  }
  443.  if(s==1)
  444.   printf("您的输入有误!请重新输入/n");
  445.  else
  446.  {
  447.   printf("/n转换后的数为:%d",result);
  448.  }
  449. }


  450. void X_B(char a[],int k)
  451. {
  452.  int i,j,s=0;
  453.  int result=0;
  454.  int b[50];
  455.  int p[30];
  456.  for(i=0;i<k;i++)
  457.  {
  458.   if(a[i]<='9'&&a[i]>='1')
  459.    b[i]=a[i]-48;
  460.   else
  461.   {
  462.    switch(a[i])
  463.    {
  464.    case 'A': b[i]=10;
  465.       break;
  466.    case 'B': b[i]=11;
  467.       break;
  468.    case 'C': b[i]=12;
  469.       break;
  470.    case 'D': b[i]=13;
  471.       break;
  472.    case 'E': b[i]=14;
  473.       break;
  474.    case 'F': b[i]=15;
  475.       break;
  476.    case 'a': b[i]=10;
  477.       break;
  478.    case 'b': b[i]=11;
  479.       break;
  480.    case 'c': b[i]=12;
  481.       break;
  482.    case 'd': b[i]=13;
  483.       break;
  484.    case 'e': b[i]=14;
  485.       break;
  486.    case 'f': b[i]=15;
  487.       break;
  488.    default: s=1;
  489.       
  490.    }
  491.   }
  492.  }
  493.  for(j=k-1,i=1;j>=0;j--,i*=16)
  494.  {
  495.   result+=b[j]*i;
  496.  }
  497.   for(j=0;result!=0;j++)
  498.  {
  499.   p[j]=result%2;
  500.   result=result/2;
  501.  }
  502.  if(s==1)
  503.   printf("您的输入有误!请重新输入/n");
  504.  else
  505.  {
  506.   printf("/n转换后的数为:");
  507.   for(k=j-1;k>=0;k--)
  508.   {
  509.    printf("%d",p[k]);
  510.   }
  511.   printf("/n");
  512.  }
  513. }

  514. void X_O(char a[],int k)
  515. {
  516.  int i,j,s=0;
  517.  int result=0;
  518.  int b[30];
  519.  int p[30];
  520.  for(i=0;i<k;i++)
  521.  {
  522.   if(a[i]<='9'&&a[i]>='1')
  523.    b[i]=a[i]-48;
  524.   else
  525.   {
  526.    switch(a[i])
  527.    {
  528.    case 'A': b[i]=10;
  529.       break;
  530.    case 'B': b[i]=11;
  531.       break;
  532.    case 'C': b[i]=12;
  533.       break;
  534.    case 'D': b[i]=13;
  535.       break;
  536.    case 'E': b[i]=14;
  537.       break;
  538.    case 'F': b[i]=15;
  539.       break;
  540.    case 'a': b[i]=10;
  541.       break;
  542.    case 'b': b[i]=11;
  543.       break;
  544.    case 'c': b[i]=12;
  545.       break;
  546.    case 'd': b[i]=13;
  547.       break;
  548.    case 'e': b[i]=14;
  549.       break;
  550.    case 'f': b[i]=15;
  551.       break;
  552.    default: s=1;
  553.    }
  554.   }
  555.  }
  556.  for(j=k-1,i=1;j>=0;j--,i*=16)
  557.  {
  558.   result+=b[j]*i;
  559.  }
  560.   for(j=0;result!=0;j++)
  561.  {
  562.   p[j]=result%8;
  563.   result=result/8;
  564.  }
  565.  if(s==1)
  566.   printf("您的输入有误!请重新输入/n");
  567.  else
  568.  {
  569.   printf("/n转换后的数为:");
  570.   for(k=j-1;k>=0;k--)
  571.   {
  572.    printf("%d",p[k]);
  573.   }
  574.   printf("/n");
  575.  }
  576. }
  577. ///////以下为: 十进制转换为二进制,八进制,十六进制.
  578. void D_B(int a)
  579. {
  580.  int j,k;
  581.  int p[30];
  582.  for(j=0;a!=0;j++)
  583.  {
  584.   p[j]=a%2;
  585.   a=a/2;
  586.  }
  587.  printf("/n转换后的数为:");
  588.  for(k=j-1;k>=0;k--)
  589.  {
  590.   printf("%d",p[k]);
  591.  }
  592.  printf("/n");
  593. }

  594. void D_O(int a)
  595. {
  596.  int j,k;
  597.  int p[30];
  598.  for(j=0;a!=0;j++)
  599.  {
  600.   p[j]=a%8;
  601.   a=a/8;
  602.  }
  603.  printf("/n转换后的数为:");
  604.  for(k=j-1;k>=0;k--)
  605.  {
  606.   printf("%d",p[k]);
  607.  }
  608.  printf("/n");
  609. }

  610. void D_X(int a)
  611. {
  612.  int j,k;
  613.  int p[30];
  614.  for(j=0;a!=0;j++)
  615.  {
  616.   p[j]=a%16;
  617.   a=a/16;
  618.   if(p[j]<10)
  619.    p[j]+=48;
  620.   else
  621.   {
  622.    switch(p[j])
  623.    {
  624.    case 10: p[j]='A';
  625.       break;
  626.    case 11: p[j]='B';
  627.       break;
  628.    case 12: p[j]='C';
  629.       break;
  630.    case 13: p[j]='D';
  631.       break;
  632.    case 14: p[j]='E';
  633.       break;
  634.    case 15: p[j]='F';
  635.       break;
  636.    }
  637.   }
  638.  }
  639.  printf("/n转换后的数为:");
  640.  for(k=j-1;k>=0;k--)
  641.  {
  642.   printf("%c",p[k]);
  643.  }
  644.  printf("/n");
  645. }
阅读(1259) | 评论(0) | 转发(0) |
0

上一篇:C++/C程序员面试的一份试题

下一篇:没有了

给主人留下些什么吧!~~