回 帖 发 新 帖 刷新版面

主题:算法求助(数据结构)

请教楼主和各位高手,十进制和其他进制之间相互转换的算法是什么呢?
恳请各位帮我分析一下,  我不太明白,难道就是 /N  *N  吗?
希望大家帮我分析分析,小弟在此谢过了……   最好有C语言描述[em18]

回复列表 (共4个回复)

沙发

给个十进制转换成二进制的:
#include<iostream.h>
#include<math.h>
int main()
{
    int dex,i=0;
    int a[20];
    bool flag=false;
    char ans;
  do
  {
    cout<<"输入一个十进制数:";
    cin>>dex;
    if(dex>=0)
          flag=true;
    
         dex=abs(dex);
    while(dex && i<20 )
    {
       a[i]=dex%2;
            dex=dex/2;
       i++;
    }
  cout<<"它的有符号二进制数是:";
  if(flag)
     cout<<'0';
  else
     cout<<'1';
   while(i--)
      cout<<a[i];
    cout<<endl;

  cout<<"继续吗?(Y/N)";
  cin>>ans;
  }while(ans=='y'  || ans=='Y');

    return 0;
}

板凳

我之前写的,十进制转换为其他“任何进制”的,C语言描述
#include"stdio.h"
#define maxsize 100
typedef struct stack
{
  int a[maxsize];
  int top;
}stack;


void init_stack(stack &sq)
{sq.top=0;}

int stackempty(stack sq)
{
    return(sq.top?0:1);
}

void  push(stack &sq,int x)
{
    if(sq.top==maxsize)
     printf("the stack is full");
     sq.a[sq.top++]=x;
  
}

int  pop(stack &sq)
{
    if(stackempty(sq))
    {
      printf("the stack is empty");
    }
     sq.top--;
     return sq.a[sq.top];
}

void jinzhizhuanhuan(int N,int B)
{
    int i;
    stack sq;
    init_stack(sq);
    while(N)
    {
        push(sq,N%B);
        N=N/B;
    }
    while(!stackempty(sq))
    {
        i=pop(sq);
        printf("%d",i);
    }
}

main()
{
    int N,B;
    printf("输入一个十进制数:");
    scanf("%d",&N);
    printf("转换为几进制 :");
    scanf("%d",&B);

    jinzhizhuanhuan(N,B);
    printf("\n");
}

3 楼


2~10进制的转换程序:
#include <iostream.h>

void fun(int n, int m);
void main(){
      int n,m;
      cin>>n>>m;
      fun(n, m);//m为输入的转换的进制数
}
void fun(int n, int m)
{   
     if(n / m)
          fun(n/m,m);
     
     cout<<n%m;
}


2~36进制的转换程序:
#include <stdio.h>

//字符串逆转
void StrReverse(char *string, int len)
{
    int  i;

    for(i=0; i<len/2; i++)
    {
        string[i] ^= string[len-i-1];
        string[len-i-1] ^= string[i];
        string[i] ^= string[len-i-1];
    }
}

// radix 支持 2 - 36 进制
void IntToStr(int value, char *string, int radix)
{
    char *p = "0123456789abcdefghijklmnopqrstuvwxyz";
    int remainder, len = 0;

    do
    {
        remainder = value % radix;
        string[len++] = p[remainder];
        value /= radix;
    }while(value);

    string[len] = '\0';

    StrReverse(string, len);
}



int main(void)
{
    char string[20];

    IntToStr(30, string, 16);      //将30化为16进制

    printf("Result = %s\n", string);
    
    return 0;
}

4 楼

谢谢给位对小弟的帮助, 谢谢 , 十分谢谢……
我所不解的是  它们的算法真的有通行 就是/N 然后进栈? 在出栈?
那有前缀的呢   而且有小数呢   那过程又是什么样呢?

我来回复

您尚未登录,请登录后再回复。点此登录或注册