@Override
publicvoid actionPerformed(ActionEvent e) { result.setText(null); GetResult gr=new GetResult(); }
getInput();//获取输入
longstartTime=System.nanoTime(); //获取大数计算开始时间 resultStr=gr.add(num1, num2);
longendTime=System.nanoTime(); //获取结束时间
System.out.println(\程序运行时间: \+(startTime-endTime)+\); if (!resultStr.isEmpty()) { inta=0; if(resultStr.charAt(0)=='-') a=1; if(!resultStr.equals(\您的输入格式不正确\)){ intn=resultStr.length()-a; result.setText(\和是\+n+\位整数:\\n \); } result.append(resultStr); } else { result.setText(\未知的错误!\); }
});
this.sub.addActionListener(new ActionListener() { @Override publicvoid actionPerformed(ActionEvent e) { result.setText(null); GetResult gr=new GetResult(); getInput();//获取输入 longstartTime=System.nanoTime(); //获取大数计算开始时间 resultStr=gr.sub(num1, num2);
longendTime=System.nanoTime(); //获取结束时间
System.out.println(\程序运行时间: \+(startTime-endTime)+\); if (!resultStr.isEmpty()) { inta=0; if(resultStr.charAt(0)=='-') a=1; if(!resultStr.equals(\您的输入格式不正确\)){ intn=resultStr.length()-a; result.setText(\差是\+n+\位整数:\\n \); } result.append(resultStr); } else {
14
}
}
}
result.setText(\未知的错误!\);
}); }
//获取输入
privatevoid getInput() { this.num1 = firstNum.getText().replaceAll(\, \); this.num2 = nextNum.getText().replaceAll(\, \); }
// 设置界面显示风格为微软窗口风格 privatevoid setWinStyle() { }
try { String lookAndFeel = UIManager.getSystemLookAndFeelClassName(); UIManager.setLookAndFeel(lookAndFeel); SwingUtilities.updateComponentTreeUI(this); } catch (Exception e) { e.printStackTrace(); }
publicstaticvoid main(String[] args) { UI h = new UI(); h.setTitle(\大数运算 -ncu.edu\); }
2.大数运算模块:GetResult类
package ncu;
import java.util.regex.Matcher; import java.util.regex.Pattern; public class GetResult { // 比较数的大小,减法需要用到
//返回1前者较大,返回0两者相等,-1后者较大 private int COMPARE(String number1, String number2) { int j;
15
}
int length1 = number1.length(); int length2 = number2.length(); if (number1.length() == 0) number1 = \
if (number2.length() == 0) number2 = \j = 0;
for (int i = 0; i < length1; ++i) { if (number1.charAt(i) == '0') ++j; else break; }
number1 = number1.substring(j); j = 0;
for (int i = 0; i < length2; ++i) { if (number2.charAt(i) == '0') ++j; else break; }
number2 = number2.substring(j); length1 = number1.length(); length2 = number2.length();
if (length1 > length2) { return 1;
} else if (length1 == length2) { if (number1.compareTo(number2) > 0) { return 1; } else if (number1.compareTo(number2) == 0) { return 0; } else { return -1; } } else { return -1; }
// 无符号大整数加法
16
public String PLUS(String number1, String number2) { int i; int length1 = number1.length(); int length2 = number2.length(); }
StringBuilder result = new StringBuilder();
number1 = new StringBuilder(number1).reverse().toString(); number2 = new StringBuilder(number2).reverse().toString(); for (i = 0; i < length1 && i < length2; i++) { char c = (char) (number1.charAt(i) + number2.charAt(i) - 48); result.append(c); }
while (i < length1) { result.append(number1.charAt(i)); ++i; }
while (i < length2) { result.append(number2.charAt(i)); ++i; }
int carry = 0;
int n = result.length(); for (i = 0; i < n; ++i) { int value = result.charAt(i) - 48 + carry; result.setCharAt(i, (char) (value % 10 + 48)); carry = value / 10; }
if (carry != 0) { result.append((char) (carry + 48)); }
String resultStr = result.reverse().toString(); if (resultStr.length() == 0) return \return resultStr;
17
// 无符号大整数减法
public String MINUS(String number1, String number2) { int i; int length1 = number1.length(); int length2 = number2.length(); StringBuilder result = new StringBuilder();
if (this.COMPARE(number2, number1) > 0) { return \}
number1 = new StringBuilder(number1).reverse().toString(); number2 = new StringBuilder(number2).reverse().toString(); for (i = 0; i < length1 && i < length2; i++) { char c = (char) (number1.charAt(i) - number2.charAt(i) + 48); result.append(c); }
if (i < length1) { for (; i < length1; i++) { result.append(number1.charAt(i)); } }
int carry = 0;
int n = result.length(); for (i = 0; i < n; i++) { int value = result.charAt(i) - 48 + carry; if (value < 0) { value = value + 10; carry = -1; } else { carry = 0; } result.setCharAt(i, (char) (value + 48)); }
for (i = n - 1; i >= 0; i--) { if (result.charAt(i) != '0') break; }
String resultStr = result.reverse().substring(n - i - 1, n); if (resultStr.length() == 0)
18
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库大数加减运算(4)在线全文阅读。
相关推荐: