首页 > 其他 > 详细

10进制数转换为其它进制

时间:2014-03-30 07:30:12      阅读:573      评论:0      收藏:0      [点我收藏+]

10进制数转换为其它进制的原理:

1.十进制数N对目标进制取余,将取余结果入栈。
2.十进制数N除以目标进制作为新的十进制数N。
3.重复进行1和2,直到N=0为止。

4.将堆栈内容输出就是转换后的结果。

实现代码如下:

/*
* Copyright (c) 2014, 武汉大学
* All rights reserved.
*
* 文件名称:number_conversion.cpp
* 摘    要:实现10进制数向其它进制的转换
*
* 当前版本:1.0
* 作    者:田鑫
* 完成日期:2014年3月29日
*/
#include<iostream>
#include "stack.h"

bool number_conversion(){
	//对于输入的任意一个非负十进制数,打印输出与其等值的K进制数
	SqStack s;
	InitStack(s);
	std::cout << "请输入待转换的十进制数N:";
	int N;
	std::cin >> N;
	int temp = N;
	if( N < 0)
	{
		std::cout << "不能输入负数\n";
		return false;
	}
	std::cout << "请输入欲转换为的目标进制K:";
	int K;
	std::cin >> K;
	if( K <= 1 || K > 10 )
	{
		std::cout << "输入进制不合法,请输入2—10之间的进制\n";
		return false;
	}

	while ( N != 0 )
	{
		Push(s,  N % K );
		N = N/K;
	}
	std::cout << temp <<"的" << K << "进制形式为:";		
	while( !StackEmpty(s))
	{
		ElemType e;
		Pop(s, e);
		std::cout << e;		
	}
	std::cout << std::endl;
	return true;
}

/*
* Copyright (c) 2014, 武汉大学
* All rights reserved.
*
* 文件名称:stack.h
* 摘    要:声明与堆栈操作相关的常用函数
*
* 当前版本:1.0
* 作    者:田鑫
* 完成日期:2014年3月29日
*/
#ifndef STACK_H
#define STACK_H

typedef int ElemType;           //堆栈元素的数据类型
const int STACK_INIT_SIZE = 20; //定义堆栈初始大小
const int STACK_INCREMENT = 10; //当堆栈空间不够时,堆栈增量的大小

typedef struct {
	ElemType * base;
	ElemType * top;
	int stacksize;
}SqStack;

bool InitStack(SqStack &s);
/*
* 函数介绍:构造一个空堆栈
* 输入参数:堆栈名
* 输出参数:无
* 返回值  :bool值
*/


bool Push(SqStack &s, ElemType e);
/*
* 函数介绍:将元素e压入栈顶
* 输入参数:堆栈名,待入栈元素值
* 输出参数:无
* 返回值  :bool值
*/


bool Pop(SqStack &s, ElemType & e);
/*
* 函数介绍:弹出栈顶元素,用e返回栈顶元素的值
* 输入参数:堆栈名
* 输出参数:e:返回栈顶元素的值
* 返回值  :bool值
*/

bool StackEmpty(SqStack &s);
/*
* 函数介绍:栈空返回true,否则返回false
* 输入参数:堆栈名
* 输出参数:空
* 返回值  :bool值
*/

#endif

/*
* Copyright (c) 2014, 武汉大学
* All rights reserved.
*
* 文件名称:stack.cpp
* 摘    要:实现与堆栈操作相关的常用函数
*
* 当前版本:1.0
* 作    者:田鑫
* 完成日期:2014年3月29日
*/
#include<iostream>
#include "stack.h"

bool InitStack(SqStack &s){  //构造一个空栈
	s.base = (ElemType*) malloc(STACK_INIT_SIZE*sizeof(ElemType));
	if( s.base == NULL )
	{
		std::cout << "内存分配失败:\n";
		return false;
	}
		
	s.top = s.base; //堆栈为空时,栈顶指针和栈底指针都指向栈底
	s.stacksize = STACK_INIT_SIZE;
	return true;
}

bool Push(SqStack &s, ElemType e){      //将元素e压入栈顶
	if(s.top - s.base >= STACK_INIT_SIZE) //判断堆栈是否还有剩余空间
	{
		s.base = (ElemType*) realloc( s.base, (s.stacksize+STACK_INCREMENT) * sizeof(ElemType) );
		if( s.base == NULL )
		{
			std::cout << "内存分配失败:\n";
			return false;
		}
		s.top = s.base + s.stacksize;
		s.stacksize += STACK_INCREMENT;
	}

	*s.top = e;
	++s.top;
	return true;
}

bool Pop(SqStack &s, ElemType & e){ 
	//若栈不空,则删除s的栈顶元素,用e返回其值,并返回true;否则返回false
	if(s.top == s.base)
		return false;
	--s.top;
	e = *s.top;
	return true;
}

bool StackEmpty(SqStack &s){
	if(s.base == s.top)
		return true;
	else
		return false;
}

运行效果如图:
bubuko.com,布布扣





10进制数转换为其它进制,布布扣,bubuko.com

10进制数转换为其它进制

原文:http://blog.csdn.net/xinshen1860/article/details/22517569

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!