首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

【数制转换有关问题 】 大讨论

2012-12-30 
【数制转换问题 】 大讨论栈的简单应用:数制转换问题(将十进制数N转换为r进制的数)将十进制数N转换为r进制的

【数制转换问题 】 大讨论
栈的简单应用:数制转换问题(将十进制数N转换为r进制的数)
将十进制数N转换为r进制的数,其转换方法利用辗转相除法:以N=3456,r=8为例转换方法如下:
N N / 8 (整除) N % 8(求余)
3467 433 3 低
433 54 1
54 6 6
6 0 6 高
所以:(3456)10 =(6563)8
我们看到所转换的8进制数按底位到高位的顺序产生的,而通常的输出是从高位到低位的,恰好与计算过程相反,因此转换过程中每得到一位8进制数则进栈保存,转换完毕后依次出栈则正好是转换结果。

基本算法思想如下:当N>0时重复1,2
1. 若 N≠0,则将N % r 压入栈s中 ,执行2;若N=0,将栈s的内容依次出栈,算法结束。
2. 用N / r 代替 N

我在网上找过很多,感觉都不是怎么好,我想和大家讨论一下用java,c#语言分别应该怎么编写这个问题?
[解决办法]
是这个不?


import java.util.Scanner;

public class xxx {
public static void main(String[] args) {
Scanner scan= new Scanner(System.in);
int n=scan.nextInt();
int r=8;
int p=0;
char x;
String s=new String();
while(n>0){
p=n%r;
if(p>9){
x=(char) (p+65-10);
}else{
x=(char) (p+48);
}
s=x+s;
n=n/r;
}
System.out.println(s);
}
}

[解决办法]
LZ参考一下这道题吧


#include <iostream>
#include <stack>
using namespace std;

int main()
{
int n, m;
char temp;
stack<char> number;
while(cin >> n >> m)
{
if(0 == n)
{
cout << "0" << endl;
continue;
}
if(n < 0)
{
cout << "-";
n = -n;
}
while(n > 0)
{
temp = n % m;
if(temp < 10)
temp += '0';
else
temp = temp - 10 + 'A';
number.push(temp);
n /= m;
}
while(!number.empty())
{
cout << number.top();
number.pop();
}
cout << endl;
}
return 0;
}

[解决办法]
void conversion()
{
    //十进制到八进制
    InitStack(S);         //建空栈
    scanf("%d", &x);    //输入一个非负十进制整数
    while (x != 0)        // x不等于零,循环
    {
        push(S, x % 8);   // x/8余数进栈
        x = x / 8;        //整除运算
    }
    while (! StackEmpty(S))   //输出存放在栈中的八进制数位
    {
        pop(S, x);
        printf("%d",x);
    }
}

热点排行