鱼C论坛

 找回密码
 立即注册
查看: 1131|回复: 6

求大神帮忙,必有重谢

[复制链接]
发表于 2018-6-18 19:26:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 125sym 于 2018-6-18 19:31 编辑

要做一个十进制转二进制的程序 自己鼓捣半天没有做出来只能求助
要求:
                         程序的每一行代码后有注释语句说明代码功能
                         有输入提示、输出提示
                         使用循环语句
求大神帮忙啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-18 19:46:53 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>

  4. #define INIT_STACK_SIZE 100
  5. #define INCREMENT 10

  6. typedef int ElemType;

  7. typedef struct
  8. {
  9.         ElemType *base;
  10.         ElemType *top;
  11.         int stacksize;
  12. }sqStack;

  13. void InitStack(sqStack *s)
  14. {
  15.         s->base = (ElemType*)malloc(INIT_STACK_SIZE*sizeof(ElemType));
  16.         s->top = s->base;
  17.         s->stacksize = INIT_STACK_SIZE;
  18. }

  19. void Push(sqStack *s, ElemType e)
  20. {
  21.         if(s->top - s->base >= s->stacksize){
  22.                 s->base = (ElemType*)realloc(s->base, (s->stacksize + INCREMENT)*sizeof(ElemType));
  23.         }
  24.        
  25.         *s->top++ = e;
  26. }

  27. void Pop(sqStack * s, ElemType *e)
  28. {
  29.         if(s->top == s->base){
  30.                 return;
  31.         }
  32.         *e = *--s->top;
  33. }

  34. int StackLen(sqStack s)
  35. {
  36.         return (s.top - s.base);
  37. }

  38. int main(void)
  39. {
  40.         ElemType c;
  41.         sqStack s;
  42.         InitStack(&s);//stuctor
  43.         printf("###### Input a Decimal Integer#######\n");
  44.         printf(">>>");scanf("%d", &c);
  45.         getchar();
  46.         while(c)
  47.         {
  48.                 Push(&s, c%2);
  49.                 c = c/2;
  50.         }
  51.        
  52.         while(StackLen(s))
  53.         {
  54.                 Pop(&s, &c);
  55.                 printf("%d ", c);
  56.         }
  57.         putchar('\n');
  58.        
  59.         return 0;
  60. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-18 19:56:26 | 显示全部楼层

大神,我知道这个代码对,可这好像是C+的吧,如果可以留个联系方式。指导一下可否
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-18 20:06:54 | 显示全部楼层
那么我来一个C版本的

  1. #include <stdio.h>
  2. #include <windows.h>

  3. int main(void)
  4. {
  5.         char buf[1024];
  6.         DWORD num;

  7.         printf("请输入:");
  8.         scanf("%d", &num);

  9.         char *p = buf;
  10.         for(DWORD mask = 0x80000000; mask; mask >>= 1)
  11.         {
  12.                 if(mask & num)
  13.                         *p++ = '1';
  14.                 else
  15.                         *p++ = '0';
  16.         }
  17.         *p = '\0';
  18.         //printf("结果是:%s\n", buf);
  19.        
  20.         p = buf;
  21.         while(*p == '0')
  22.                 ++p;
  23.         printf("结果是:%s\n", p);
  24.         return 0;
  25. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-18 22:02:09 | 显示全部楼层
本帖最后由 凌九霄 于 2018-6-18 22:54 编辑

python直接有个bin函数转换么,为何还要那么麻烦,实在闲的蛋疼的话,就自行写个如下的转化函数


  1. def dec2bin(string_num):

  2. '''十进制转二进制算法就是将该数字不断除以2直到商为零,然后将余数由下至上依次写出,即可得到该数字的二进制表示'''

  3.     num = int(string_num)                           #转字符数字为整数
  4.     mid = []                                        #定义一个空列表,用来接收下面不断除以2得到的余数rem,rem是0或者1
  5.     while True:                                     #永真循环
  6.         if num == 0: break                          #如果输入的数字是0或者最后的商为0则结束循环
  7.         num, rem = divmod(num, 2)                   #关键运算,divmod函数能同时输出商和余数,并将输出赋给num和rem,并将num作为下次的被除数
  8.         mid.append(rem)                             #将得到的余数添加进列表

  9.     return ''.join([str(x) for x in mid[::-1]])     #将整数列表反向输出为字符列表,并连接成二进制字符串
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-18 22:08:10 | 显示全部楼层
  1. num = int(input('请输入一个十进制数字:'))  #键盘输入并转换为整数
  2. b = '' #用字符串b来接收每个二进制的位
  3. while num: #在num不为0时循环
  4.     b = str(num % 2) + b #num对2取模并加到b的前面
  5.     num //= 2 #num整除2
  6. if not b: #在num为0时,b为空,这时将b改为0
  7.     b = '0'
  8. print('转换成二进制是: 0b' + b) #输出b,并在前面加上二进制的字头0b
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-18 22:29:12 | 显示全部楼层
本帖最后由 天天学习新东西 于 2018-6-18 22:35 编辑
  1. # -*- coding: utf-8 -*-

  2. print('-----------------十进制转换二进制------------------')
  3. print('输入Q结束程序')

  4. while 1:
  5.     num = input('请输入数字:')
  6.    
  7.     if num =='Q':
  8.         exit()                   #输入Q结束程序

  9.     if num.isdigit() == True:    #判断输入的字符是否全是数字
  10.       
  11.         print(bin(int(num)))     #如果是使用bin()函数把十进制转换为二进制

  12.     else:                        #如果输入的不是数字,给提示,跳出此次循环
  13.         print('请输入正整数')
  14.         continue
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-23 18:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表