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 |
贪心策略,我来解释一下首先,这题要用高精度,我用的Java,可以偷懒下~ 如果原数不为1,则依次从9-0扫描能否整除它,如果可以的话将i放入栈,继续此步骤直到原数为1。判断如果栈中元素数<2的话则将1压栈。然后逆向输出数字即可。具体细节看我程序吧,没写注释,但是感觉结构很清楚~~ Source Code Problem: 2325 User: yzhw Memory: 5448K Time: 375MS Language: Java Result: Accepted Source Code import java.util.*; import java.io.*; import java.math.BigInteger; public class Main { /** * @param args */ public static void main(String[] args) throws IOException{ BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); BigInteger stdnum[]=new BigInteger[10]; stdnum[0]=new BigInteger("0"); stdnum[1]=new BigInteger("1"); for(int i=2;i<10;i++) stdnum[i]=stdnum[i-1].add(stdnum[1]); Stack <Integer>ans=new Stack(); while(true) { String str=in.readLine(); if(str.compareTo("-1")==0) break; BigInteger num=new BigInteger(str); if(num.equals(stdnum[0])) { System.out.println(10); continue; } else if(num.equals(stdnum[1])) { System.out.println(11); continue; } // ans.clear(); boolean flag=false; while(!num.equals(stdnum[1])) { flag=false; for(int i=9;i>1;i--) if(num.mod(stdnum[i]).equals(stdnum[0])) { flag=true; num=num.divide(stdnum[i]); ans.push(i); break; } if(!flag) break; } if(!flag) { System.out.println("There is no such number."); ans.clear(); } else { while(ans.size()<2) ans.push(1); while(!ans.empty()) { System.out.print(ans.pop()); } System.out.println(); } } } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator