我正在尝试解决this "exponentiation" problem。
这是我写的代码
import java.util.Scanner;
import java.util.ArrayList;
import java.math.BigInteger;
import java.io.*;
import java.math.*;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
Scanner Input = new Scanner(System.in);
BigDecimal R,f;// = new BigInteger();
ArrayList <String> ans = new ArrayList <String> ();
int n;
///// I dont know how to deal with it
while( R = Input.nextBigDecimal(), n = Input.nextInt() )
////
f = R.pow(n);
f = f.stripTrailingZeros();
String s = f.toPlainString();
String answer = "";
answer = s;
if(s.charAt(0) == '0')
s = s.substring(1);
ans.add(answer);
System.out.println(s);
}
}
现在我想问的问题是,如何在文件结束前输入输入? (我已经使用while(cin&gt;&gt;&gt;&gt;&gt; s)等使用c ++解决了这些问题)但我不知道如何解决这个问题。
答案 0 :(得分:0)
你的答案是:
public static void main(String[] args) {
// TODO code application logic here
System.out.println("Please enter the R and n values seperated by space");
Scanner Input = new Scanner(System.in);
BigDecimal R = null;
BigDecimal f = null;// = new BigInteger();
ArrayList<String> ans = new ArrayList<String>();
int n = 0;
R = (Input.nextBigDecimal());
System.out.println("The value of R is " + R);
n = Input.nextInt();
System.out.println("The value of n is " + n);
f = R.pow(n);
f = f.stripTrailingZeros();
String s = f.toPlainString();
String answer = "";
answer = s;
if (s.charAt(0) == '0') {
s = s.substring(1);
}
ans.add(answer);
System.out.println(s);
}
注意:上面的代码不会检查有效输入。
答案 1 :(得分:0)
扫描仪类也有hasNextBigDecimal()方法,所以你想这样做:
while ( Input.hasNextBigDecimal() ) {
R = Input.nextBigDecimal();
n = Input.nextInt();
... // processing
}
扫描程序对于大量输入文件来说很慢。如果该行具有众所周知的格式(例如,两个以空格分隔的数字),我正在使用BufferedReader:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) );
String parts[] = br.readLine().split( " " );
如果你想使用java,你也应该学习Java naming conventions。
使用split
甚至比StringTokenizer
更好,它更快。