您的位置:首页 > 编程语言 > Java开发

(记数-进制转换-java)用-2为基做进制转换

2012-09-09 09:10 281 查看
这学期有门课叫做工程数学基础,第一章节我们学习一些关于记数的知识。
这里大致有几个概念要知道,第一为基,如10进制,10就是基,记做a,其次为数字符号集合s,这个又常常被称为a的完全剩余类,在s和a上存在一些约束关系,例如(未证明),s中最大元素的值小于|a|,s中元素的个数要等于|a|,在正整数领域,而s中的元素未必是一成不变的,如同3进制,我们可以使用0,1,2,同时也可以使用0,1,-1,如此,但是如果不满足以上两个条件,可能会导致,不能够表示整个数系中所有的数,这里需要注意。
同时我们不仅能够用正整数做基,还可以用负数,虚数,无理数,以及fibonacci数列作为基,如下程序(采用java)
import javax.print.DocFlavor.STRING;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.io.StringWriter;
import java.math.*;
public class transform {

/**
* make by Edward.xu
* 9.7.2012 0:30
* small version 0.2
*/
static JTextField deciamlField;
static JTextField binaryField;
static long decimal;
static long binary;
static String decimalNumber;
static String binaryNumber;
public static void main(String[] args) {
// TODO Auto-generated method stub
// print function,long time no to use java
// to write a kit
binaryNumber = new String();
decimalNumber = new String();
System.out.println("徐方鑫特制-超级小型机制转换器");
// create a frame which is the main panel
JFrame frame = new JFrame("徐方鑫设计-must");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// the main panel
JPanel panel = new JPanel();
frame.add(panel);
// i like use the box.expecially the vertical box
Box mainBox = Box.createVerticalBox();
panel.add(mainBox);
// to prove my write
/*
JLabel verionLabel = new JLabel("Version 0.1");
JLabel schoolLabel = new JLabel("Master of must 2012");
JLabel nameLabel = new JLabel("Made by Edward.xu");
mainBox.add(verionLabel);
mainBox.add(schoolLabel);
mainBox.add(nameLabel);
*/
// the first box which tip this is decimal number
Box deciamlBox = Box.createHorizontalBox();
mainBox.add(deciamlBox);
JLabel deciamlLabel = new JLabel("Deciaml:");
deciamlField = new JTextField();
deciamlBox.add(deciamlLabel);
deciamlBox.add(deciamlField);
// the second box which tip this is Binary number
Box binaryBox = Box.createHorizontalBox();
mainBox.add(binaryBox);
JLabel binaryLabel = new JLabel("Binary:");
binaryField = new JTextField();
binaryBox.add(binaryLabel);
binaryBox.add(binaryField);
// the button start transform
Box buttonBox = Box.createHorizontalBox();
mainBox.add(buttonBox);
JButton decToBinButton = new JButton("10 to -2");
JButton binToDecButton = new JButton("-2 to 10");
buttonBox.add(decToBinButton);
buttonBox.add(binToDecButton);
// the main function of the calculate
decToBinButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e1)
{
binaryNumber = "";
try{
decimalNumber = deciamlField.getText();
decimal = Long.parseLong(decimalNumber);
// main transform
while(decimal != 1)
{
if((decimal%(-2))==-1)
{
//rewrite %,it's very necessary
//System.out.print(decimal - ((-2)*(decimal / (-2) + 1)));
binaryNumber = binaryNumber + String.valueOf(decimal - ((-2)*(decimal / (-2) + 1)));
decimal = decimal / (-2) + 1;
}
else
{
//System.out.print(decimal - ((-2)*(decimal / (-2))));
binaryNumber = binaryNumber + String.valueOf(decimal - ((-2)*(decimal / (-2))));
decimal = decimal / (-2);
}
}
//System.out.print("1");
binaryNumber = binaryNumber + "1";
// end main transform
StringBuilder reverseBinaryNumber = new StringBuilder(binaryNumber);
binaryNumber = reverseBinaryNumber.reverse().toString();
binaryField.setText(binaryNumber);
}catch(Exception ex1)
{
JOptionPane.showMessageDialog(null, "你是在填数字吗?");
}
}
});
binToDecButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e2)
{
try{
binary = 0;
decimal = 0;
// x/power(10,n) * power((-2),n)
binaryNumber = binaryField.getText();
binary = Long.parseLong(binaryNumber);
decimal = binary % 10 + decimal;
for (int i = binaryNumber.length() - 1; i>0 ; i--)
{
//System.out.println(i);
decimal = decimal + ((binary / (long) (Math.pow(10, i)) )* (long)Math.pow(-2, i));
binary = binary - (binary / (long) (Math.pow(10, i)))*(long) Math.pow(10, i);
//System.out.println(binary);
}
//System.out.println(decimal);
decimalNumber = String.valueOf(decimal);
deciamlField.setText(decimalNumber);
}catch(Exception ex1)
{
JOptionPane.showMessageDialog(null, "你是在填数字吗?");
}

}
});
// start the frame and panel,make it visible
frame.setSize(300,140);
frame.setVisible(true);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息