本文主要是介绍Symmetric Number 求取对称数字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近实验室师兄找工作,今天帮师兄做了一道亚马逊中国的在线笔试题。说的是Symmetric Number(对称数字),即给定一个数字,获取大于它且最接近它的对称数字。
例如,123对应131,12321对应12421。正常要求是C语言实现,可惜本人习惯于JAVA,所以用JAVA写了一段代码,测试通过。代码如下:
public class SymmNum {public static void main(String[] args){System.out.println("对称数字:"+getSymNum("561068369"));}
/*** 获取大于给定数的最接近对称数 * @param n* @return*/public static int getSymNum(String n){System.out.println("给定数字:"+n);ArrayList<Integer> m = getInt(n);String result = "";if(m.size()%2==1){ //奇数位给定数字String s1 = "";String s2 = "";for(int i=(m.size()-1)/2-1;i>=0;i--){s1 = s1 + m.get(i);}System.out.println(s1);for(int i=(m.size()-1)/2+1;i<m.size();i++){s2 = s2 + m.get(i);}System.out.println(s2);if(Integer.parseInt(s1)>Integer.parseInt(s2)){ //前半部分数字倒序值大于后半部分数字值result = getBackward(s1)+m.get((m.size()-1)/2)+s1;}else{if(m.get((m.size()-1)/2)!=9){ //中间位数字不等于9String s11 = "";ArrayList<Integer> i1 = getInt(getBackward(s1));for(int i=0;i<i1.size();i++)s11 = s11 + i1.get(i);result = s11+((m.get((m.size()-1)/2))+1)+getBackward(s11);}else{ //中间位数字等于9String s11 = "";ArrayList<Integer> i1 = getInt(getBackward(s1));for(int i=0;i<i1.size()-1;i++)s11 = s11 + i1.get(i);s11 = s11 + (i1.get(i1.size()-1)+1);result = s11+0+getBackward(s11);} }}else{ //偶数位给定数字String s1 = "";String s2 = "";for(int i=m.size()/2-1;i>=0;i--){s1 = s1 + m.get(i); //逆序}System.out.println(s1);for(int i=m.size()/2;i<m.size();i++){s2 = s2 + m.get(i); //顺序}System.out.println(s2);if(Integer.parseInt(s1)>Integer.parseInt(s2)){ //前半部分数字倒序值大于后半部分数字值result = getBackward(s1)+s1;}else{ //前半部分数字倒序值小于后半部分数字值String s11 = "";ArrayList<Integer> i1 = getInt(getBackward(s1));for(int i=0;i<i1.size()-1;i++)s11 = s11 + i1.get(i);s11 = s11 + (i1.get(i1.size()-1)+1);result = s11+getBackward(s11);}}return Integer.parseInt(result);}
/*** 获取整数每一位数字 列表返回 * @param sValue* @return*/public static ArrayList<Integer> getInt(String sValue){ArrayList<Integer> m = new ArrayList<Integer>();int size = sValue.length();for (int i = 0; i < size; i++)m.add(sValue.codePointAt(i) - '0');return m;}
/*** 字符型整数逆序返回 * @param s1* @return*/public static String getBackward(String s1){String s2 = "";ArrayList<Integer> s = getInt(s1);for(int i=s.size()-1;i>=0;i--){s2 = s2 + s.get(i);}return s2;}
}
代码包地址 http://download.csdn.net/detail/u011342532/8018113
这篇关于Symmetric Number 求取对称数字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!