数制转换:
十进制数N和其它d进制数的转换是计算机实现计算的基本问题,其解决方法很多,其中一种简单方法基于以下原理.
N=(N div d)*d+N mod d (其中:div为整除运算,mod 为求余运算.)
例如:10进制数1348转换为8进制为:2504.其运算过程如下:
N N div d N mod d
1348 168 4
168 21 0
21 2 5
2 0 2
假设现要编制一个满足下列要求的程序:对于输入的任意一个非负十进制整数,打印输出与其相等的八进制数,由于上述计算过程是从低位到高位顺序产生八进制数的各个位数,而打印输出,一般来说应从高位到低位进行,恰好和计算过程相反.因此,若将计算过程中得到的八进制数的各位顺序进栈,则按出栈序列打印输出的即为与输入对应的八进制数.
完整代码实现:
递归实现十进制转换为八进制:
十进制数N和其它d进制数的转换是计算机实现计算的基本问题,其解决方法很多,其中一种简单方法基于以下原理.
N=(N div d)*d+N mod d (其中:div为整除运算,mod 为求余运算.)
例如:10进制数1348转换为8进制为:2504.其运算过程如下:
N N div d N mod d
1348 168 4
168 21 0
21 2 5
2 0 2
假设现要编制一个满足下列要求的程序:对于输入的任意一个非负十进制整数,打印输出与其相等的八进制数,由于上述计算过程是从低位到高位顺序产生八进制数的各个位数,而打印输出,一般来说应从高位到低位进行,恰好和计算过程相反.因此,若将计算过程中得到的八进制数的各位顺序进栈,则按出栈序列打印输出的即为与输入对应的八进制数.
算法描述如下:
void conversion()
{
InitStack(s);
scanf(" %d",N);
while(N)
{
push(s,n%8)
N=N/8;
}
while(!StackEmpty(s))
{
Pop(S,e);
printf("%d",e);
}
}
完整代码实现:
#include<iostream>
#include<stack>
using namespace std;
void change(int n,int d)
{
stack<int>s;
int temp;
int i=0;
if(n<d)
{
cout<<n<<endl;
}
else
{
while(n)
{
temp=n%d;
s.push(temp);
n=n/d;
}
while(!s.empty())
{
temp=s.top();
cout<<temp;
s.pop();
}
cout<<endl;
}
}
void main()
{
int x,y;
cout<<"请输入你要转换的数字"<<endl;
cin>>x;
cout<<"请输入你要转换的进制"<<endl;
cin>>y;
change(x,y);
}
递归实现十进制转换为八进制:
/*
Name: conversion.cpp
Copyright: www.52coder.net
Author: HeHe.wang
Date: 16-06-12 13:03
Description:
*/
#include <iostream>
using namespace std;
void conversion(int N,int d)
{
int temp=N%d;
N=N/d;
if(N==0)
cout<<temp;
else
{
conversion(N,d);
cout<<N%d;
}
}
int main()
{
conversion(7,2);
system("pause");
}
文章出自:我爱程序员 http://www.52coder.net/archives/1039.html 版权所有.本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源.