| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8968 人关注过本帖, 1 人收藏
标题:求用C语言版数据结构做的十进制转换成其它进制(2,8,16)的程序!!!
只看楼主 加入收藏
tanghf1014
Rank: 2
等 级:论坛游民
帖 子:37
专家分:37
注 册:2010-10-15
结帖率:77.78%
收藏(1)
已结贴  问题点数:5 回复次数:9 
求用C语言版数据结构做的十进制转换成其它进制(2,8,16)的程序!!!
有会的帮个忙。。。感激涕零!!
搜索更多相关主题的帖子: 进制 C语言 数据结构 
2010-10-15 10:58
瓦药墙
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:218
专家分:556
注 册:2009-9-16
收藏
得分:0 
用栈
2010-10-15 21:17
瓦药墙
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:218
专家分:556
注 册:2009-9-16
收藏
得分:5 
我粗略写了一个

程序代码:
#include <stdio.h>

typedef struct tagSTACK
{
    int stack[255];
    int top;
}
STACK;

STACK s;

void push (int i)
{
    s.top++;
    s.stack[s.top] = i;
}

int pop ()
{
    int ret;
    if (s.top > -1)
    {
        ret = s.stack[s.top];
        s.top--;
        return ret;
    }
    return -1;
}

void Bin (int i, int k, char str[])
{
    int j, ret;
    while (i)
    {
        push (i % k);
        i /= k;
    }
    for (j = 0; ret = pop (), ret != -1; ++j)
    {
        if (ret > 9)
        {
            str[j] = ret + 'A' - 10;
        }
        else
        {
            str[j] = ret + '0';
        }
    }
    str[j] = 0;
}


int main (void)
{
    int i;
    char result[255];

    s.top = -1;

    scanf ("%d", &i);

    Bin (i, 2, result);

    printf ("二进制:\t\t%s\n", result);

    s.top = -1;

    Bin (i, 8, result);
   
    printf ("八进制:\t\t%s\n", result);

    Bin (i, 16, result);

    printf ("十六进制:\t%s\n", result);
    return 0;
}
2010-10-15 21:40
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:0 
程序代码:
#include <iostream>
#include <stack>
using namespace std;
int NumConvert(int n,int k);
int main()
{
    int n,k;
    cout<<"请输入十进制数:"<<endl;
    cin>>n;
    cout<<"请输入想转化的进制:"<<endl;
    cin>>k;
    NumConvert(n,k);

}
int NumConvert(int n,int k)
{
    stack<char> s;
    int flag=0;
    if(n<0)
    {
        n=-n;
        flag=1;
    }
    while(n)
    {
        char x;
        int m=n%k;
        if(m>=10)
            x='A'+m-10;
        else 
            x='0'+m;
        s.push(x);
        n=n/k;
    }
    if(flag==1)
        s.push('-');
    while(!s.empty())
    {
        char e=s.top();
        s.pop();
        cout<<e;
    }

    return 0;
}
我写的!

If You Want Something, Go Get It, Period.
2010-10-16 11:04
tanghf1014
Rank: 2
等 级:论坛游民
帖 子:37
专家分:37
注 册:2010-10-15
收藏
得分:0 
回复 3楼 瓦药墙
谢谢啊,大侠,明天就做上机实验了,强人。。。
2010-10-17 10:07
yuanfeng1129
Rank: 2
等 级:论坛游民
帖 子:62
专家分:31
注 册:2010-8-7
收藏
得分:0 
看来哥哥也要学了,以前了解过栈,俄罗斯方块编出来后就去学了
2010-10-22 22:18
取而代之
Rank: 2
等 级:论坛游民
帖 子:32
专家分:53
注 册:2010-7-11
收藏
得分:0 
#include<iostream>
#include<cmath>
using namespace std;
#define stack_int_size 100
typedef struct
{
    char *top;
    char *base;
    char StackSize;
}Sqstack;

void intstack(Sqstack &S)
{
    S.base=(char *)malloc(stack_int_size * sizeof(char )) ;
    S.top=S.base;
    S.StackSize=stack_int_size;
}

int gettop(Sqstack s,char &e)
{
    if(s.top==s.base)
        return -1;
    e=*(s.top-1);
    return e;
}

void push(Sqstack &s,char e)
{
    *(s.top++)=e;
}

int emptystack(Sqstack &s)
{
    if(s.top==s.base)
        return 1;
    else
        return 0;
}

void pop(Sqstack &s,char e)
{
    e=*(--s.top);
}

char *converson(int N,int d,char *p)
{
    int y=N;
    Sqstack S;
    intstack(S);
    char e;
    int q;
    char b[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    while(N)
    {
        q=abs(N%d);
        char ch;
        for(int j=0;j<=q;j++)
        {
            ch=b[j];
        }
        push(S,ch);
        N=N/d;
    }
    if(y<0)
        push(S,'-');
    int j=0;
    while(!emptystack(S))
    {
        char i;
        i=gettop(S,e);
        p[j]=i;
        j++;
        pop(S,e);
    }
    p[j]='\0';
    return &p[0];
}

void main()
{
    int a,b;
    char p[100];
    while(cin>>a>>b)
    {   
        converson(a,b,p);
        cout<<p<<endl;
    }
}



HDU  ACM  AC过才敢发上来。
2010-10-25 21:22
qi_lin
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-10-26
收藏
得分:0 
回复 楼主 tanghf1014
//利用栈完成数制转换。改进算法使得能够完成十进制数向任意其他进制数的转换(如:十→八或十→十六)。
#include<iostream.h>
#include<malloc.h>
#define MaxSize 16
typedef int ElemType;
typedef struct
{
    ElemType data[MaxSize];
    int top;
}SqStack;
//初始化栈
void InitStack(SqStack *&s)
{
    s=(SqStack *)malloc(sizeof(SqStack));
    s->top=-1;
}
//销毁栈
void ClearStack(SqStack *&s)
{
    free(s);
}
//进栈
int Push(SqStack *&s,ElemType e)
{
    if(s->top==MaxSize-1)
        return 0;
    s->top++;
    s->data[s->top]=e;
    return 1;
}
//出栈
int Pop(SqStack *&s,ElemType &e)
{
    if(s->top==-1)
        return 0;
    e=s->data[s->top];
    s->top--;
    return 1;
}
//取栈顶元素
int GetTop(SqStack *s,ElemType &e)
{
    if(s->top==-1)
        return 0;
    e=s->data[s->top];
    return 1;
}
//显示栈中元素
void DispStack(SqStack *s)
{
    int i;
    for(i=s->top;i>=0;i--)
        cout<<s->data[i];
}
//十六进制判断
void Judge(SqStack *s)
{
    int i;
    for(i=s->top;i>=0;i--)
    {
        if(s->data[i]==10)   cout<<"A";
            else if(s->data[i]==11)   cout<<"B";
            else if(s->data[i]==12)   cout<<"C";
            else if(s->data[i]==13)   cout<<"D";
            else if(s->data[i]==14)   cout<<"E";
            else if(s->data[i]==15)   cout<<"F";
        else cout<<s->data[i];
    }
}
void main()
{
    SqStack *s;
    InitStack(s);
    int i,t,j,m;//要转换的进制,j要被转换的数
    cout<<"请输入要转换的数(注意:j的范围):";
    cin>>j;
    cout<<"请输入要转换成的进制(二进制,八进制,十六进制):";
    cin>>i;
    if(i==2||i==8)
    {
        if(j<0)
        {   m=-j;
            while(m!=0)
            {
                t=m%i;
                Push(s,t);
                m=m/i;
            }
            Push(s,1);
        }
        else if(j>0)
        {   
            while(j!=0)
            {
                t=j%i;
                Push(s,t);
                j=j/i;
            }
            Push(s,0);
        }
    cout<<"转换成"<<i<<"进制后的代码(首位为符号位):";
    DispStack(s);
    ClearStack(s);
    }
    if(i==16)
    {
        if(j<0)
        {   m=-j;
            while(m!=0)
            {
                t=m%i;
                Push(s,t);
                m=m/i;
            }
            Push(s,1);
        }
        else if(j>0)
        {   
            while(j!=0)
            {
                t=j%i;
                Push(s,t);
                j=j/i;
            }
            Push(s,0);
        }
    cout<<"转换成"<<i<<"进制后的代码(首位为符号位):";
    Judge(s);
    ClearStack(s);
    }
    cout<<endl;
}
2010-10-26 13:31
joc天使
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-4-9
收藏
得分:0 
#include "linkstack.c"

main()
{
    linkstack *1s=NULL;
    datatype *a=NULL,n;
    linkstacknull(1s);
    scanf ("请输入一个十进制的非负整数:%d",\n);
    while (n)
    {
        1s=linkpush(1s,n%2);
        n=n/2;
    }
    printf ("\n转化后对应的二进制数为:");
    while (1s!=NULL)
    {
        1s=linkpop(1s,a);
        printf ("%d",*a);
    }
}
2011-04-09 10:24
joc天使
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-4-9
收藏
得分:0 
根据的原理就是  N=(N div d)*d+N mod d (其中的div是整除 mod 是求余)
这是一个栈 是从低位到高位一个个进栈的的 然后出栈的时候就是从高到低  
2011-04-09 10:27
快速回复:求用C语言版数据结构做的十进制转换成其它进制(2,8,16)的程序!! ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020055 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved