随笔-42  评论-349  文章-4  trackbacks-0
上次屁颠屁颠的跑了1k多公里去ucweb面试,本来自我感觉还不错的,可是还是很郁闷得就给打回来了……
     其中有个笔试题是求两个大数(比如100位)的和,我当时知道怎么做,思路也没问题,但是在纸上划的时候估计有些细节没处理好,比如判断输入等。回来后自己重新做了一遍,把它贴出来共享,奉献给即将面试的兄弟伙,有什么问题请拍砖。

    网络上还有另外一个版本:

   这又是一个版本:


By:残梦追月
posted on 2009-03-10 12:58 残梦追月 阅读(5571) 评论(20)  编辑  收藏

评论:
# re: java大数加法 2009-03-10 14:20 | zy.weiliang@gmail.com
???为什么你要自己实现,jdk本身即有大数的api,直接调用不就行了.
除非他非要你自己实现这个算法.
一般公司没有这么变态吧,纯粹为了考试而考试,又不是sun这样的开发语言的公司.  回复  更多评论
  
# re: java大数加法 2009-03-10 16:03 | 隔叶黄莺
String s1 = "1234567890";
String s2 = "";
for (int i = 0; i < 100; i++) {
s2 += s1;
}
BigDecimal bd1 = new BigDecimal(s2+".123456789");
BigDecimal bd2 = new BigDecimal(s2+".123456789");
System.out.println(bd1.add(bd2));

输出是:
2469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780246913578024691357802469135780.246913578

自己算一下,或数一下是多少位了。  回复  更多评论
  
# re: java大数加法 2009-03-10 16:35 | 张林君
@zy.weiliang@gmail.com
对啊,我也是这样想的?
或许作者不知道吗?好像不太可能啊  回复  更多评论
  
# re: java大数加法 2009-03-10 16:43 | 张林君
@隔叶黄莺
这个什么意思啊 有问题吗?
这个结果整数部分是1000位啊....  回复  更多评论
  
# re: java大数加法 2009-03-10 16:52 | 隔叶黄莺
小数部分还可以继续  回复  更多评论
  
# re: java大数加法[未登录] 2009-03-10 17:25 | aaa
import java.io.*;
import java.util.*;
import java.math.BigInteger;

class Test{
static final Scanner cin=new Scanner(System.in);

public static void main(String[] args){
while(cin.hasNext()){
String str1=cin.next(),str2=cin.next();
BigInteger a=new BigInteger(str1),b=new BigInteger(str2);
System.out.println(a.add(b));
}
}
}  回复  更多评论
  
# re: java大数加法 2009-03-10 19:47 | 王兵
后面的评论有点跑题了

不过确实在开发过程中没有人会自己写一个大数相加类  回复  更多评论
  
# re: java大数加法 2009-03-10 20:57 | 残梦追月
@隔叶黄莺
隔兄,你这个是什么意思啊?我没搞明白耶……貌似这样不行……  回复  更多评论
  
# re: java大数加法 2009-03-10 21:01 | 残梦追月
@aaa
where is method "add()"?  回复  更多评论
  
# re: java大数加法 2009-03-10 22:12 | YXY
You can find "public BigInteger add(BigInteger val)" by http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/index.html  回复  更多评论
  
# re: java大数加法 2009-03-10 22:45 | 隔叶黄莺
@残梦追月
BigDecimal和BigInteger就有 add() 方法的。你试一试吧。  回复  更多评论
  
# re: java大数加法[未登录] 2009-03-11 10:13 | aaa
@残梦追月,
where is method "add()"? 这是偷懒的办法直接调用API!

import java.math.BigInteger;

public class BigInt {
public static void main(String[] args) {
String a="999";
String b="999";
BigInteger str1=new BigInteger(a);
BigInteger Str2=new BigInteger(b);
BigInteger sum=str1.add(Str2);
System.out.println(sum);
}
}  回复  更多评论
  
# re: java大数加法 2009-03-11 13:06 | 残梦追月
@隔叶黄莺
寒!我只是知道有BigDecimal,却还不知道BigInteger ,长见识了。
我本来想用BigDecimal的,但是题目要求是自己实现……

我是说我没看明白为什么……


String s1 = "1234567890";
String s2 = "";
for (int i = 0; i < 100; i++) {
s2 += s1;
}
BigDecimal bd1 = new BigDecimal(s2+".123456789");
BigDecimal bd2 = new BigDecimal(s2+".123456789");
System.out.println(bd1.add(bd2));

空串+小数点 为什么会出现这种情况?  回复  更多评论
  
# re: java大数加法 2009-03-11 13:07 | 残梦追月
@aaa
o(∩_∩)o...,谢谢勒。长见识了,还有个BigInteger,还以为是你自己实现得……  回复  更多评论
  
# re: java大数加法 2009-03-11 13:51 | 隔叶黄莺
@残梦追月
不是空串+小数点,用s2+".123456789" 是为了说明 BigDecimal 也能支持小数。  回复  更多评论
  
# re: java大数加法 2009-03-11 17:19 | 残梦追月
@隔叶黄莺
额……呵呵
  回复  更多评论
  
# re: java大数加法 2009-07-21 10:40 | Frank_Fang
请问你这个代码着色是怎么做的?  回复  更多评论
  
# re: java大数加法 2009-08-17 10:16 | 残梦追月
@Frank_Fang
看我页面的源码啊  回复  更多评论
  
# re: java大数加法 2011-07-09 17:16 | eraser0
一般这种题目就是考细心而已啦。。。话说用BigInteger的话还算面试题目吗。。。UCweb在广州也只能算一般啦,其实。。。  回复  更多评论
  
# re: java大数加法[未登录] 2012-05-31 22:19 | helloworld
package acm1000;

import java.util.Scanner;

public class Main
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String s1, s2;
String SUM = "";
int t;
int a, b;
int num;
num = sc.nextInt();
boolean j = false;
int n = 0;
do
{
s1 = sc.next();
s2 = sc.next();
System.out.println("Case " + ++n + ":");
System.out.print(s1 + " + " + s2 + " = ");
SUM = "";
a = s1.length();
b = s2.length();

if (a <= b)
{

String splus = "";
for (int p = 0; p < b - a; p++)
splus += "0";
s1 = splus + s1;

a = b;
t = a;
}
else
{
String splus = "";
for (int p = 0; p < a - b; p++)
splus += "0";
s2 = splus + s2;
b = a;
t = a;
}
j = false;
for (int i = 0; i <= t; i++)
{

if ((s1.length() > 0))
{
String c;
c = "" + s1.substring(a - 1, a);
String d = s2.substring(a - 1, a);
s1 = s1.substring(0, a - 1);
s2 = s2.substring(0, a - 1);
a--;
int cToInt = Integer.parseInt(c);
int dToInt = Integer.parseInt(d);

int sum = cToInt + dToInt;

if (j == true)
{
sum = sum + 1;
}
if (sum >= 10)
{
j = true;
sum = sum - 10;
}
else if (sum < 10)
j = false;
SUM = sum + SUM;
}
}
if (j)
SUM = 1 + SUM;
System.out.println(SUM);
System.out.println();
}
while (--num != 0);
}

}


同JAVA,好像思想上跟你的第二个差不多。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: