| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
帮忙看看什么原因import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
private int pointNums = 0;
//计算两个数的字符串乘积
private String getMultResult(String mulf,String muls){
char[] c1 = mulf.toCharArray();
char[] c2 = muls.toCharArray();
int len1 = c1.length;
int len2 = c2.length;
int count = 0;
List retList = new ArrayList();
for(int i=(len1-1);i>=0;i--){
int aNum = Integer.valueOf(String.valueOf(c1[i])).intValue();
Stack ret = new Stack();
boolean addFlag = false;
for(int j=(len2-1);j>=0;j--){
int bNum = Integer.valueOf(String.valueOf(c2[j])).intValue();
int num = aNum*bNum;
if(addFlag){
Integer temp = (Integer)ret.pop();
if(temp!=null)
num = num + temp.intValue();
}
if(num>=10){
ret.push(new Integer(num%10));
ret.push(new Integer(num/10));
addFlag = true;
}
else{
ret.push(new Integer(num));
addFlag = false;
}
}
for(int m=0;m<count;m++){
ret.insertElementAt(new Integer(0),0);
}
retList.add(ret);
count++;
}
String resultValue = getAddResult(retList);
return resultValue;
}
private String getAddResult(List valueList){
Iterator itor = valueList.iterator();
int count = 0;
Stack result = new Stack();
while(itor.hasNext()){
Stack tStack = (Stack)itor.next();
if(count==0){
result = tStack;
}
else{
int len1 = result.size();
int len2 = tStack.size();
if(len1>len2)
result = sumAll(result,tStack);
else
result = sumAll(tStack,result);
}
count++;
}
StringBuffer buf = new StringBuffer();
while(result.size()>0){
buf.append(result.pop().toString());
}
return buf.toString();
}
private Stack sumAll(Stack s1,Stack s2){
Iterator itor = s2.iterator();
int count = 0;
int len = s1.size();
Stack result = new Stack();
boolean addFlag = false;
while(itor.hasNext()){
Integer c2 = (Integer)itor.next();
Integer c1 = (Integer)s1.get(count);
int value = c2.intValue()+c1.intValue();
if(addFlag){
Integer s = (Integer)result.pop();
if(s!=null)
value = value + s.intValue();
}
if(value>=10){
result.push(new Integer(value%10));
result.push(new Integer(value/10));
addFlag = true;
}
else{
result.push(new Integer(value));
addFlag = false;
}
count++;
}
while(count<len){
Integer c1 = (Integer)s1.get(count);
int value = c1.intValue();
if(addFlag){
Integer s = (Integer)result.pop();
if(s!=null)
value = value + s.intValue();
}
if(value>=10){
result.push(new Integer(value%10));
result.push(new Integer(value/10));
addFlag = true;
}
else{
result.push(new Integer(value));
addFlag = false;
}
count++;
}
return result;
}
private String formatStrNum(String str,int pointNums){
if(pointNums<=0)
return str;
StringBuffer strf = new StringBuffer(str);
int len = strf.length();
while(len<pointNums){
strf.insert(0,"0");
len++;
}
int pointPos = len - pointNums;
String str1 = strf.substring(0,pointPos);
String str2 = strf.substring(pointPos);
return str1+"."+str2;
}
private String formatInput(String input){
StringBuffer ret = new StringBuffer(input);
int pointPos = input.indexOf(".");
int len = input.length();
if(pointPos==0){
ret.insert(0,'0');
pointPos = 1;
}
else if(pointPos==(len-1)){
ret.deleteCharAt(pointPos);
pointPos = -1;
}
if(pointPos==-1){
int a = Integer.parseInt(ret.toString());
this.pointNums = 0;
return String.valueOf(a);
}
else{
StringBuffer str1 = new StringBuffer(ret.substring(0,pointPos));
StringBuffer str2 = new StringBuffer(ret.substring(pointPos+1));
int leng = str2.length();
for(int i=(leng-1);i>=0;i--){
char arg = str2.charAt(i);
if(arg=='0'){
str2.deleteCharAt(i);
}
else
break;
}
this.pointNums = str2.length();
int a = Integer.parseInt(str1.toString());
if(a==0 && pointNums>0){
int b = Integer.parseInt(str2.toString());
return String.valueOf(b);
}
else if(a>0 && pointNums<=0){
return String.valueOf(a);
}
else if(a>0 && pointNums>0){
return String.valueOf(a)+str2.toString();
}
return "0";
}
}
public static void main(String[] arg){
try {
Main m = new Main();
BufferedReader stdin =new BufferedReader(new InputStreamReader(System.in));
int ii=0;
while(ii<6){
String line = stdin.readLine();
StringTokenizer st = new StringTokenizer(line);
String a = String.valueOf(st.nextToken());
int b = Integer.parseInt(st.nextToken());
if(b==0)
break;
a = m.formatInput(a);
if(a.equals("0")){
System.out.println(0);
return;
}
String num = a;
for(int i=1;i<b;i++){
num = m.getMultResult(a,num);
}
num = m.formatStrNum(num,m.pointNums*b);
System.out.println(num);
ii++;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator