十进制数转换成R进制数,R属于(1,36)

原创 2012年03月21日 14:16:10
/***************************************************************************************
* File Name   : jinzhizhuanhua.cpp                                                     *
* Created by (Author, Date )  :  Renzhibo  2012/3/21                                   *
*																					   *
* Description : 十进制转换成R进制;													   *
*				1<R<36																   *
*				注意 考虑 负数														   *
*Modified Details (Modified Date/Modifier/ Modified Reason):						   *
* 1:											                                       *
* 2:																				   *
***************************************************************************************/

#include <fstream>
#include <iostream>
#include <stack>  // STL中的栈 类

using namespace std;

const int R_SYSTEM = 5;
const char ALL_DIGIT[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
						'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 
						'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
						'U', 'V', 'W', 'X', 'Y', 'Z'};
stack<char> g_cStack; // 栈 容器

int ChangdecimalsystemtoRsystem(int iDecimal_number, int iRsystem);
int GetIndex(char cChar);
char GetChar(int iIndex);
void PrintStack();

int main()
{
	char cContinue = 'y';
	while ('y' == cContinue || 'Y' == cContinue)
	{
		//接收 输入的 十进制 数
		cout << "Please input a Decimal Number:";
		int iInDecimalNumber = 0;
		cin >> iInDecimalNumber;
		// 同步 输入缓冲区
		cin.sync();
		//接收 输入的 R进制
		cout << "Please input a system:";
		int iInRsystem = 0;
		cin >> iInRsystem;
		// 回显 用户 输入的 十进制数
		cout << "You input the number is:" << iInDecimalNumber << endl << "(if the number is not you input, maybe you didn't input a Decimal  number)" << endl;

		if ( 0 != ChangdecimalsystemtoRsystem(iInDecimalNumber, iInRsystem))
		{
			cout << endl << "The " << iInRsystem << " system is wrong" << endl;
		}
		else
		{
			cout << endl << "The number( " << iInDecimalNumber << " ), " << iInRsystem << "'s system" << " result is :" << endl; 
			PrintStack(); // 输出
		}
		//同步 输入 流
		cin.sync();
		cout << "Continue(Y/y),other keys quit!" << endl;
		cContinue = getchar();
	}

	return 0;
}

/******************************************************************************
* Function Name : ChangdecimalsystemtoRsystem								  *
* Description   : 转换 十进制 到 Rsystem 进制	                              *
* Date          : 2012/3/21												      *
* Parameter     : iDecimal_number: 十进制数								  *
*				  iRsystem : 表示1~36 之间 的 进制							  * 
* Return Code   : -1 表示 出错	                                              *
* Author        : Renzhibo                                                    *
******************************************************************************/
int ChangdecimalsystemtoRsystem(int iDecimal_number, int iRsystem)
{
	int iReturnvalue = 0;
	if ( iRsystem > 1 && iRsystem < 36) // 判断 iRsystem 进制 是否 在 1 ~ 36 之间
	{
		bool bIs_positive_number = true; // 标示 是否 是整数
		if (iDecimal_number < 0)
		{	
			iDecimal_number = -iDecimal_number; // 将 负数 改成 正数
			bIs_positive_number = false;
		}

		int iTemp;
		char iTempChar;
		while (0 != iDecimal_number)
		{	
			//cout << iDecimal_number % iRsystem << endl;
			iTemp = iDecimal_number % iRsystem;
			iDecimal_number /= iRsystem;
			// 将指定 字符 入栈
			iTempChar = GetChar(iTemp);
			g_cStack.push(iTempChar);
		}
		// 如果是 负数 将 - 压入栈
		if (!bIs_positive_number)
		{
			g_cStack.push('-');
		}
	}
	else
	{
		iReturnvalue = -1;
	}
	
	return iReturnvalue;
}

/******************************************************************************
* Function Name : GetIndex													  *
* Description   : 获得 指定 值 在常量数组中的下标值                           *
* Date          : 2012/3/21												      *
* Parameter     : cInchar													  *
* Return Code   : -1 false;	                                              *
* Author        : Renzhibo                                                    *
******************************************************************************/
int GetIndex(char cInchar)
{
	int iTemp = -1;
	if (cInchar > '0' && cInchar < '9')
	{
		iTemp =	cInchar - 48;
	}
	else if (cInchar >= 'A' && cInchar <= 'Z')
	{
		iTemp =	cInchar - 55;	// 将 字母的 asci码 转换成 在数组中的下标 A 是 10
	}					
	else
	{
		iTemp = -1;
	}
	return iTemp;
}

/******************************************************************************
* Function Name : GetChar													  *
* Description   : 获得 指定 常量数组下标 的值                                 *
* Date          : 2012/3/21												      *
* Parameter     : iIndex													  *
* Return Code   : -1 false;	                                              *
* Author        : Renzhibo                                                    *
******************************************************************************/
char GetChar(int iIndex)
{
	int iTemp = -1;
	if (iIndex >= 0 && iIndex <= 9)    // 又一次 忘记 了 等号, 记得要 边界值 注意啊。
	{
		iTemp =	iIndex + 48;
	}
	else if (iIndex >= 10 && iIndex <= 35)
	{
		iTemp =	iIndex + 55;	
	}				
	else
	{
		iTemp = -1;
	}
	return iTemp;
}

/******************************************************************************
* Function Name : PrintStack												  *
* Description   : 输出 栈 中的 值			                                  *
* Date          : 2012/3/21												      *
* Parameter     : 无														  *
* Return Code   : 无													      *
* Author        : Renzhibo                                                    *
******************************************************************************/
void PrintStack()
{
	while (!g_cStack.empty())
	{
		cout << g_cStack.top() << " ";
		g_cStack.pop();
	}
	cout << endl;
	return;
}


 

顺序栈实现十进制转成R进制

2016年7月31日13:53:37 利用顺序栈实现十进制整数转换转换成r进制 1、算法思想 将十进制数N转换为r进制的数,其转换方法利用辗转相除法,以N=3456,r=8为例...
  • ArithmeticException
  • ArithmeticException
  • 2016年11月19日 12:48
  • 1835

ACM-任意的十进制数转成R进制

原题是这样的: Description 输入一个十进制数N,将它转换成R进制数输出。 Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(210)。 Outp...
  • lin19931006
  • lin19931006
  • 2013年06月16日 23:11
  • 3079

使用链栈来对十进制数进行任意进制的转换

使用C语言,和辗转相除法,通过链栈来实现一个十进制数字对任意进制的一个转换。...
  • wzgl__wh
  • wzgl__wh
  • 2016年05月11日 20:47
  • 2906

(栈的运用)十进制数转换r进制数

//思路:将十进制数(number)除以R取余,让取得的余数(number Mod R )进栈, //让十进制数变为number/R,重复上述过程,直到number等于0为止,然后依次 //从栈中取出...
  • GL771066709
  • GL771066709
  • 2017年03月28日 19:26
  • 356

十进制数转换成x进制----栈实现

十进制数转换成x进制栈实现                        题目:输入一个十进制数n,以及要求转换成的进制x,输出x进制下的n.用栈实现.约定输入的数为正整数,进制x为2-36,输出的...
  • xiaoyu_93
  • xiaoyu_93
  • 2012年09月21日 17:30
  • 1063

C语言(11)--回文日、确定等式、fflush(stdin)、将十进制数转换成n进制数、二分法解方程

1、回文日、 2、确定等式 3、fflush(stdin) 4、将十进制数转换成n进制数 5、二分法解方程 当年份确定后,如2015年,就看20155102能否构成一个合法的日期,其中51部分是...
  • Ramay7
  • Ramay7
  • 2015年09月09日 19:10
  • 632

用栈完成十进制转换成R进制

  • 2013年12月08日 17:20
  • 3KB
  • 下载

数制转换, 将一个十进制整数m转换成 →r(2-16)进制字符串,VB6.0源代码编写

  • 2009年06月10日 08:21
  • 412KB
  • 下载

第二周上机任务1-2--编写循环函数将十进制数转换成二进制数输出

实验目的:编写循环函数将十进制数转换成二进制数输出 实验内容: * 程序头部注释开始 * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * C...
  • leihengxin
  • leihengxin
  • 2012年02月27日 20:10
  • 1028

第一周第二天([变量名] [运算符] [语句] [求水仙花数的算法][求一个十进制数转换成二进制数有多少个1的算法] [continue的用法])

目录变量名 运算符 变量名运算符 “` java public class yusuanfu { public static void main(String[] ...
  • tuanzi11
  • tuanzi11
  • 2015年07月15日 15:29
  • 378
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:十进制数转换成R进制数,R属于(1,36)
举报原因:
原因补充:

(最多只允许输入30个字)