鱼C论坛

 找回密码
 立即注册
查看: 3839|回复: 3

用栈结构把二进制转换八进制的问题

[复制链接]
发表于 2014-8-13 22:15:34 | 显示全部楼层 |阅读模式

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

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

x

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

#define  stack_int_size 20
#define  stack_add_size 10
typedef char elemtype;  //warning!!!
typedef struct{
    elemtype *base;
    elemtype *top;
    int topsize;
}node,* pnode;
void initializer_list(pnode s){         //初始化一个栈 大小为topstack
    s->base=(elemtype *)malloc(stack_int_size*sizeof(elemtype));
    if(!s->base){
        exit(0);
    }
    s->top=s->base;
    s->topsize=stack_int_size;
}
void push(pnode s,elemtype e){
    if((s->top)-(s->base)>=s->topsize){
        s->base=(elemtype *)realloc(s->base,(s->topsize+stack_add_size)*sizeof(elemtype));
        if(!(s->base)){
            exit(0);
        }
        }
        *(s->top)=e;
        s->top++;
    }
int pop(elemtype *e,pnode s){
    if(s->top==s->base){
        return 0;
    }
    *e=*--(s->top);
}
int stacklenth(pnode s){
    return (s->top-s->base);
}
int main()
{
    char c;
    int len,number,i,test,intnumber,j,total;
    j=total=0;
    number=0;
    pnode p=(pnode)malloc(sizeof(node));
    initializer_list(p);
    printf("请输入进制数:\n");
    printf("ended by #\n");
    scanf("%c",&c);
        while(c!='#'){
            push(p,c);
            scanf("%c",&c);
        }
        getchar();
        len=stacklenth(p);
        printf("栈当前容量是%d.\n",len);
        while(len>0){
        for(i=0;i<3;i++){
            test=pop(&c,p);
            --len;
            if(test==0){
                break;
            }
            number=number+(c-48)*pow(2,i);
        }
        printf("the number is %d.\n",number);
        total=total+number*pow(10,j);                      //关键问题出在这一行 看到我看到我看到我
        ++j;
        number=0;
   printf("the total number is %d.\n",total);
        }

    printf("the last number is %d.\n",total);
    return 0;
    }



===============================================================================
前方代码,在code blocks可运行
写的是将一个二进制数输入 以#键结束 然后转换成八进制数打印出来
问题出在一旦二进制数六位或者六位以上,最后的八进制数打印出来总会少1,
例如:输入110110110#  会输出665  实际应该是666
输入的二进制数在六位以下输出正确
经过调试
如果输入110110110#
前面都对
总是在    total=total+number*pow(10,j);      这一行 莫名其妙的就蹦成665
然后输出
百思不得其解
求!耐!心!人!看!一!看!好!么!
谢谢!


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-14 18:59:57 | 显示全部楼层
为什么要用栈呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-17 05:43:48 From FishC Mobile | 显示全部楼层
Mikel 发表于 2014-8-14 18:59
为什么要用栈呢?

因为是按到数据结构的视频写的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-20 22:03:45 | 显示全部楼层
自己停了几天又看
是因为pow()函数的出错
pow( )百度发现里面两个参数应该是double型
而返回值也是double型
所以改成double型后
答案就没出错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 09:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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