2016中国大学生程序设计竞赛(长春) Ugly Problem

来源:互联网 发布:怎么开通淘宝花呗支付 编辑:程序博客网 时间:2024/05/21 12:46
import java.io.*;import java.math.BigInteger;import java.util.*;import java.text.*;public class Main {    public static void main(String[] args){        Scanner cin=new Scanner(new BufferedInputStream(System.in));        PrintWriter cout=new PrintWriter(System.out);        DecimalFormat df=new  DecimalFormat("#.0");          BigInteger n, a, b, _0=new BigInteger("0");        BigInteger _1=new BigInteger("1");        BigInteger _10=new BigInteger("10");        BigInteger []ans=new BigInteger[55];        String s, sa, sb;        int sz=0, cas=1, T;        T=cin.nextInt();        while(T>0){            T--;            s=cin.next();            sz=0;            while(!done(s)){                n=new BigInteger(s);                int ls=s.length();                if(ls%2==0){                    sa=s.substring(0, ls/2);                    sb=s.substring(ls/2, ls);                    a=new BigInteger(reverse(sa));                    b=new BigInteger(sb);                    if(a.compareTo(b)<=0){                        sa=sa+reverse(sa);                        a=new BigInteger(sa);                        ans[sz++]=a;                        n=n.subtract(a);                        s=n.toString();                    }                    else{                        char []cb=sa.toCharArray();                        int pos=find_one(sa);                        cb[pos]--;                        sa=new String(cb);                        sa=sa+reverse(sa);                        a=new BigInteger(sa);                        ans[sz++]=a;                        n=n.subtract(a);                    }                }                else{                    sa=s.substring(0, ls/2);                    sb=s.substring(ls/2+1, ls);                    a=new BigInteger(reverse(sa));                    b=new BigInteger(sb);                    if(a.compareTo(b)<=0){                        sa=sa+s.substring(ls/2, ls/2+1)+reverse(sa);                        a=new BigInteger(sa);                        n=n.subtract(a);                        ans[sz++]=a;                    }                    else{                        sa=sa+s.substring(ls/2, ls/2+1);                        int pos=find_one(sa);                        char []cb=sa.toCharArray();                        cb[pos]--;                        sa=new String(cb);                        sa=sa+reverse(sa.substring(0,sa.length()-1));                        a=new BigInteger(sa);                        n=n.subtract(a);                        ans[sz++]=a;                    }                }                s=n.toString();            }            if(s.length()==1){                n=new BigInteger(s);                if(n.compareTo(_0)>0)                    ans[sz++]=new BigInteger(s);            }            else{                n=new BigInteger(s);                a=new BigInteger(s.substring(0,1));                if(a.compareTo(_1)>0)                    a=_10.subtract(a.subtract(_1));                ans[sz++]=a;                ans[sz++]=n.subtract(a);            }            cout.println("Case #"+(cas++)+":");            cout.println(sz);            for(int i=0;i<sz;i++)                cout.println(ans[i]);            cout.flush();        }    }    public static String reverse(String a){        char[] b=a.toCharArray();        int len=a.length();        for(int i=0;i<len/2;i++){            char t=b[i];            b[i]=b[len-1-i];            b[len-1-i]=t;        }        String c=new String(b);        return c;    }    public static boolean done(String a){        int len=a.length();        char []b=a.toCharArray();        for(int i=1;i<len;i++)            if(b[i]!='0')                return false;        return true;    }    public static int find_one(String a){        char []b=a.toCharArray();        for(int i=a.length()-1;i>=0;i--)            if(b[i]>'0')                return i;        return -1;    }}

0 0
原创粉丝点击