鱼C论坛

 找回密码
 立即注册
查看: 262|回复: 0

写了一个二进制转换八进制

[复制链接]
最佳答案
0 
发表于 2018-4-16 19:23:43 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

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

x
好像是成功了,但又不确定,求大家看看0的
     t应该整形啊!可是入栈又没有问题。这里没问题吗?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>


typedef struct tow{
        char* tp;        //  栈顶
        char* dp;       //  栈尾  
        int number;
}tow;

void inittowstack(tow* s);   //  初始化栈
void pushtowstack(tow* s,char ch);            /*      压栈  给栈传值     */
void poptowstack(tow* s,char *ch);     /*  出栈  */
void desetow(tow* s);                /*  销毁一个栈  */



int main()
{
        tow binary,octal;
       
       
        int num,sum=0,t=0;
       
        char ch,ch1;
       
       
        inittowstack(&binary);
       
        inittowstack(&octal);
       
       
        printf("请输入二进制数:\n");
        ch=getchar();
        while(ch!='#')
        {
                pushtowstack(&binary,ch);
                //printf("********************\n压入二进制栈的第%d个元素为%c\n",binary.number+1,*(binary.tp));
            ch=getchar();
        }
        getchar();
        num=binary.number;
       
    char str[num];
   
    int i=1,j=1;
   
    while(i<=num)
    {
            poptowstack(&binary,&ch1);     /*  出栈  */
           
           
            //printf("********************\n出栈的第%d个元素为%c\n",binary.number,ch1);
           
            sum=sum+(ch1-48)*pow(2,i-1);
           
            t=t+(ch1-48)*pow(2,j-1);         //  二进制转换为八进制  (j
就是这里的t应该是整形啊!可是入栈又没有问题。这里没问题吗?
            if(i%3==0)
            {
                    pushtowstack(&octal,t);      // 进入八进制的栈
                   
                    t=0;
                    j=0;
                }
               
           
           
            str[binary.number]=ch1;
                i++;
                j++;                
        }
        pushtowstack(&octal,t);
       

        printf("\n二进制数装换十进制为:%d\n",sum);
       
       
       
       
/*    printf("\n原二进制数:\n");
        for(int i=0;i<num;i++)
        {
                printf("%c",str[i]);
        }
*/       
        char teep;
        sum=0;
       
        while((octal.tp)!=(octal.dp))
    {
            poptowstack(&octal,&teep);
        //printf("\n********************\n出八进制栈的第%d个元素为%d\n",octal.number,teep);
        
        sum=sum+teep*pow(10,(octal.number));

        }
       
        printf("\n二进制数装换八进制为:%d\n",sum);
}

void inittowstack(tow* s)   //  初始化栈
{
        (s->dp)=(char*)malloc(100*sizeof(char));
       
        if((s->dp)==NULL)
        {
                printf("栈空间申请失败..\n");
                exit(0);
        }
       
        (s->tp)=(s->dp);
       
        s->number=0;       
}

void pushtowstack(tow* s,char ch)            /*      压栈  给栈传值     */
{
       
        if((s->number>=100))
        {
                printf("没有空间存放数据,SORRY...\n");
                exit(0);
        }
       

       
        *(s->tp)=ch;
        (s->tp)++;
        (s->number)++;       
}

void poptowstack(tow* s,char *ch)     /*  出栈  */
{
       
        if((s->tp)==(s->dp))
        {
                printf("\n数据以全部出完,现在是空栈...\n");
        return;
        }
       
       
        (s->tp)--;
        *ch=*(s->tp);
       
        s->number--;
       
}

void desetow(tow* s)                /*  销毁一个栈  */
{
        int i,n;
       
        n=s->number;
       
        //for(i=0;i<n;i++)
        while((s->dp)!=(s->tp))
        {
                free(s->dp);
                *(s->dp)++;       
        }
        printf("\n\n栈清除成功!\n");
        s->dp=s->tp=NULL;
        s->number=0;
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号 )

GMT+8, 2018-7-23 12:07

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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