java吧 关注:1,238,411贴子:12,709,151

比洪水猛兽来的更急,高手救命。。。。。ORZ

只看楼主收藏回复

一楼度娘表抽我。。。


1楼2011-06-27 10:22回复
    明天下午要考试了,有个题还不会,童鞋们都不会。。。求指教


    2楼2011-06-27 10:23
    回复
      求两个很大的数字之和(基本数据类型放不下的),老师的提示是用String类模拟,不要求考虑带符号运算,求高手帮忙解答。。。。。。。泪奔


      3楼2011-06-27 10:26
      回复
        小小的加法有什么难的?用分割的方法进行运算,进位自己看着办,结果再用字符串连接,还有你老师用String处理是坑爹,这样经常对字符串进行变换的不能用String,这是浪费内存又没效率


        4楼2011-06-27 11:35
        回复
          模拟小学加法
          111111
          + 2222
          ------
          113333


          IP属地:北京5楼2011-06-27 11:37
          回复
            BigDecimal绝对能搞定的.


            6楼2011-06-27 13:03
            回复
              能不能给出完整的代码实现,我是小白。。。。。


              7楼2011-06-27 13:22
              回复
                好高深的回答,。。。。。。


                8楼2011-06-27 13:23
                回复
                  人家考算法,你用大数值想过都难。


                  9楼2011-06-27 16:12
                  回复
                    我就随便写个,你自己优化吧。
                    public class Test8 {
                    public static void main(String[] args) {
                    String str = "999523873567502823595424255424326";
                    String str2 = "996743567493630683354634563";
                    //BigInteger b1 = new BigInteger(str);//用大数值来验证,结果是一样的。
                    //BigInteger b2 = new BigInteger(str2);
                    //System.out.println(b1.add(b2));
                    long one = 0l;
                    StringBuilder sb = new StringBuilder();
                    System.out.println(add(str,str2,sb,one).toString());
                    }
                    public static StringBuilder add(String str,String str2,StringBuilder sb,long one) {
                    if(str.length()>18&&str2.length()>18) {
                    long l = Long.valueOf(str.substring(str.length()-18, str.length()))+Long.valueOf(str2.substring(str2.length()-18, str2.length()))+one;
                    str = str.substring(0, str.length()-18);
                    str2 = str2.substring(0, str2.length()-18);
                    if(String.valueOf(l).length()>18) {
                    one = 1;
                    l = Long.valueOf(String.valueOf(l).substring(1));
                    }
                    sb = sb.insert(0, l);
                    add(str,str2,sb,one);
                    }
                    else if(str.length()>18||str2.length()>18) {
                    if(str2.length()>str.length()) {
                    String test = str;
                    str = str2;
                    str2 = test;
                    }
                    long l = Long.valueOf(str.substring(str.length()-18, str.length()))+Long.valueOf(str2)+one;
                    str = str.substring(0, str.length()-18);
                    str2 = "0";
                    if(String.valueOf(l).length()>18) {
                    one = 1;
                    l = Long.valueOf(String.valueOf(l).substring(1));
                    }
                    sb = sb.insert(0, l);
                    add(str,str2,sb,one);
                    }
                    else {
                    long l = Long.valueOf(str)+Long.valueOf(str2)+one;
                    sb = sb.insert(0, l);
                    }
                    return sb;
                    }
                    }


                    10楼2011-06-27 17:45
                    回复
                      百度的垃圾格式显示。。。。。。运算主要靠下面的递归函数



                      11楼2011-06-27 17:50
                      回复
                        最后结果和验证是一样的



                        12楼2011-06-27 17:51
                        回复
                          嗯,谢谢了,你是明白人。。。。


                          13楼2011-06-27 20:28
                          回复
                            发现有个小BUG,如果2数相加最后一位刚好是10,进1,那么结果会少了个0的,就看LZ自己会不会修改了,这个BUG很容易改的。


                            14楼2011-06-27 21:07
                            回复
                              递归函数.....


                              IP属地:广东15楼2011-06-28 08:32
                              回复