急求一个小程序 急求一个小程序:要求输入一个一百位以上的数字n,求n的e次方再除以d的余数其中n可以用随机数获取(输入一个种子),e和d是自己输入的数字有界面的再送100分界面至少有三个框框,分别输入三个数,有一个按钮用来求值 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://ju.qihoo.com/topframe/dingzhen.php?ju=978662&ml=978906&u=ebe6199cc86f185d9b9c031702781b84&r=978714&d=978822 public class math2 { private double n; private double e; private double d; public math2(String str1,String str2,String str3) { n=Double.parseDouble(str1); e=Double.parseDouble(str2); d=Double.parseDouble(str3); } /* public double get_n() { return(this.n); } public double get_e() { return(this.e); } public double get_d() { return(this.d); } */ public double act() { double r=Math.pow(n,e); System.out.print(d); r=r%d; return(r); } public static void main(String [] args) { String str1 = JOptionPane.showInputDialog("enter n:"); String str2=JOptionPane.showInputDialog("enter e:"); String str3=JOptionPane.showInputDialog("enter d:"); math2 m=new math2(str1,str2,str3); double r; r=m.act(); JOptionPane.showMessageDialog(null,"the result is"+r,"result",JOptionPane.INFORMATION_MESSAGE); }}不理解你的意思 大概写了一下 LZ参考一下好了 楼主这道题要干嘛,这么热的天折磨计算机啊!100位以上的数字,求次方再求余,CPU要累爬下的!!to: tdy1234精度不够啊,100位以上的数字,使用 double 类型会损失精度的,应改用 BigInteger 或 BigDecimal 的。 呵呵 TO楼上的兄弟 随便写一下,给思路而已,100位以上MS应该理解成为百位数 要是按照你们的理解 还要乘方 差点的CPU不直接当掉 差点的 CPU 当掉!我看好的也得当掉,又不是什么小型机、中型机的。100位的数字光2次方一下就有10000位了,就已经不是能够理解的数字了,况且要命的是冪次还是输入的,随便怎么说不可能会比2小的数字吧,再高一点的话那还了得。最要命的还是做好次方再求余,你们说 CPU 不趴下去谁趴下!! import java.awt.GridLayout;public class ModeCalculate extends java.awt.Dialog { public ModeCalculate(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); } private void initComponents() { label11 = new java.awt.Label(); textN = new java.awt.TextField(); label12 = new java.awt.Label(); textE = new java.awt.TextField(); label13 = new java.awt.Label(); textD = new java.awt.TextField(); button = new java.awt.Button(); label14 = new java.awt.Label(); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { closeDialog(evt); } }); label11.setText("输入n:"); label12.setText("输入e:"); label13.setText("输入d:"); button.setLabel("计算"); button.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { button3ActionPerformed(evt); } }); label14.setText(""); this.setLayout(new GridLayout(4, 2)); this.add(label11); this.add(textN); this.add(label12); this.add(textE); this.add(label13); this.add(textD); this.add(button); this.add(label14); this.setSize(500,600); pack(); } private void button3ActionPerformed(java.awt.event.ActionEvent evt) { label14.setText(""); long n = Long.parseLong(textN.getText()); long d = Long.parseLong(textD.getText()); long e = Long.parseLong(textE.getText()); label14.setText(""+calculate(n, d, e)); } private long calculate(long n, long d, long e) { if (e == 1) return n%d; return (n*calculate(n, d, e-1))%d; } private void closeDialog(java.awt.event.WindowEvent evt) { setVisible(false); dispose(); } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new ModeCalculate(new java.awt.Frame(), true).setVisible(true); } }); } private java.awt.Button button; private java.awt.Label label11; private java.awt.Label label12; private java.awt.Label label13; private java.awt.Label label14; private java.awt.TextField textN; private java.awt.TextField textE; private java.awt.TextField textD;}当n=9999999999999999e=1234d=88888883333结果:4869171364都没问题,只是e不能取的太大,太大堆栈就泻了,哈哈 两个类之间的问题 请教各位一个关于native code的问题 这是程序中的一个Bug吗? 方法重写 帮帮忙吧。一个线程问题。 为什么不可以在外部创建内部静态类对象啊??? 郁闷啊,自己觉得自己写的代码BUG太多了,大家教教我该怎么样避免这种情况。 我是初学者,请教各位大虾:JCreatorPro的环境变量如何设置? ★★★★★特大好消息! 与大家共享,java爱好者必看!(高兴顺便送分) 在什么系统下学习比较好? 有谁写过可以处理动态脚本语言如Javascript的爬虫? [junit問題]我在使用junit時出現如下錯誤提示,編譯不過,不知是何原因?
private double n;
private double e;
private double d; public math2(String str1,String str2,String str3)
{ n=Double.parseDouble(str1);
e=Double.parseDouble(str2);
d=Double.parseDouble(str3);
}
/*
public double get_n()
{
return(this.n);
}
public double get_e()
{
return(this.e);
}
public double get_d()
{
return(this.d);
}
*/
public double act()
{
double r=Math.pow(n,e);
System.out.print(d);
r=r%d;
return(r);
} public static void main(String [] args)
{
String str1 = JOptionPane.showInputDialog("enter n:");
String str2=JOptionPane.showInputDialog("enter e:");
String str3=JOptionPane.showInputDialog("enter d:");
math2 m=new math2(str1,str2,str3);
double r;
r=m.act();
JOptionPane.showMessageDialog(null,"the result is"+r,"result",JOptionPane.INFORMATION_MESSAGE); }
}
不理解你的意思 大概写了一下 LZ参考一下好了
精度不够啊,100位以上的数字,使用 double 类型会损失精度的,应改用 BigInteger 或 BigDecimal 的。
public ModeCalculate(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
}
private void initComponents() {
label11 = new java.awt.Label();
textN = new java.awt.TextField();
label12 = new java.awt.Label();
textE = new java.awt.TextField();
label13 = new java.awt.Label();
textD = new java.awt.TextField();
button = new java.awt.Button();
label14 = new java.awt.Label(); addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
closeDialog(evt);
}
});
label11.setText("输入n:");
label12.setText("输入e:");
label13.setText("输入d:");
button.setLabel("计算");
button.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
button3ActionPerformed(evt);
}
}); label14.setText("");
this.setLayout(new GridLayout(4, 2));
this.add(label11);
this.add(textN);
this.add(label12);
this.add(textE);
this.add(label13);
this.add(textD);
this.add(button);
this.add(label14);
this.setSize(500,600);
pack();
} private void button3ActionPerformed(java.awt.event.ActionEvent evt) {
label14.setText("");
long n = Long.parseLong(textN.getText());
long d = Long.parseLong(textD.getText());
long e = Long.parseLong(textE.getText());
label14.setText(""+calculate(n, d, e));
}
private long calculate(long n, long d, long e) {
if (e == 1)
return n%d;
return (n*calculate(n, d, e-1))%d;
} private void closeDialog(java.awt.event.WindowEvent evt) {
setVisible(false);
dispose();
} public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ModeCalculate(new java.awt.Frame(), true).setVisible(true);
}
});
}
private java.awt.Button button;
private java.awt.Label label11;
private java.awt.Label label12;
private java.awt.Label label13;
private java.awt.Label label14;
private java.awt.TextField textN;
private java.awt.TextField textE;
private java.awt.TextField textD;
}
当
n=9999999999999999
e=1234
d=88888883333
结果:4869171364
都没问题,只是e不能取的太大,太大堆栈就泻了,哈哈