主题:算法求助(数据结构)
dmx19861112
[专家分:0] 发布于 2006-06-05 19:10:00
请教楼主和各位高手,十进制和其他进制之间相互转换的算法是什么呢?
恳请各位帮我分析一下, 我不太明白,难道就是 /N *N 吗?
希望大家帮我分析分析,小弟在此谢过了…… 最好有C语言描述[em18]
回复列表 (共4个回复)
沙发
InitInstance [专家分:8720] 发布于 2006-06-05 22:31:00
给个十进制转换成二进制的:
#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;
}
板凳
hohohaha [专家分:580] 发布于 2006-06-06 19:08:00
我之前写的,十进制转换为其他“任何进制”的,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 楼
arfi [专家分:850] 发布于 2006-06-06 20:12:00
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 楼
dmx19861112 [专家分:0] 发布于 2006-06-08 09:33:00
谢谢给位对小弟的帮助, 谢谢 , 十分谢谢……
我所不解的是 它们的算法真的有通行 就是/N 然后进栈? 在出栈?
那有前缀的呢 而且有小数呢 那过程又是什么样呢?
我来回复