Java实习生面试题(新华智云)

316 阅读1分钟

现场编程题

  • 写一个方法实现两个大正整数的加法运算,输入参数是两个大正整数,以字符串形式表示,字符串的长度不超过1024,返回值是两个大整数之和对应的字符串,例如:"12345" + "12345" = "24690"
  • 要求:1)使用Java语言;2)不能使用大整数运算库;3)时间不超过20分钟

代码

//字符串转数组的工具方法
 public static int[] convert(String str){
        int[] arr=new int[str.length()];
        for (int i=0;i<arr.length;i++) {
            arr[i]=str.charAt(i)-48;
        }
        return arr;
    }
//字符串相加方法    
 public static String sum(String st1,String st2){
        //标记是否进位
        int num=0;
        //s存储相加返回的结果
        String s="";
        int[] str1=convert(st1);
        int[] str2=convert(st2);
        int i=str1.length-1;
        int j=str2.length-1;
        while(i>=0&&j>=0){
            int r= str1[i]+str2[j]+num;
            if(r>=10){
                num=1;
                String temp=r+"";
                s+=temp.charAt(temp.length()-1);
            }else{
                num=0;
                s+=r+"";
            }
            i--;
            j--;
        }
        if(st1.length()==st2.length()){
          int[] temp= convert(s);
          s="";
          //字符串加等的结果需要反转输出
          for (int k = temp.length-1; k >=0 ; k--) {
              s+=temp[k];
          }
            return s;
        }else if(i<0){
            String str=st2.substring(0,j+1);
            int temp= Integer.parseInt(str);
            if(num!=0){
                temp=temp+1;
            }
           int[] ss=convert(s);
            String t=temp+"";
            s=t;
            for (int k = ss.length-1; k >=0 ; k--) {
                s+=ss[k];
            }
            return s;
        }else{
            String str=st1.substring(0,i+1);
            int temp= Integer.parseInt(str);
            if(num!=0){
                temp=temp+1;
            }
            int[] ss=convert(s);
            String t=temp+"";
            s=t;
            for (int k = ss.length-1; k >=0 ; k--) {
                s+=ss[k];
            }
            return s;
        }
    }