多位十进制数相加问题

今天看到一道题目,关于两个n位十进制数的加法问题,不禁想起了n久前在一次华为的面试中被问起两个50位的整数相乘的问题。唉,一个小小的问题,说起来虽然简单,实际做的时候却有很多细节要注意,我平时还是空想大于实干了。

不曾想到,这段代码,来来回回居然花了几个小时的时间。

//(#)NBitDecimalIntegerAlgorithm.java

public class NBitDecimalIntegerAlgorithm {

/**
* addition
*
* @param a the first addend
* @param b the second addend
*
* @return the sum
*/

public static int[] addAB(int[] a, int[] b) {
int maxLength = a.length;
if (a.length < b.length) {
maxLength = b.length;
}

int[] integerA = new int[maxLength];
int[] integerB = new int[maxLength];

for (int i = 0; i < a.length; i++) {
integerA[i] = a[i];
}

for (int i = 0; i < b.length; i++) {
integerB[i] = b[i];
}

int[] sum = new int[maxLength + 1];

int carry = 0;
for (int i = 0; i < maxLength; i++) {
int tempSum = integerA[i] + integerB[i] + carry;
int remainder = tempSum % 10;
carry = tempSum / 10;

sum[i] = remainder;
}

sum[sum.length - 1] = carry;
return sum;

}

/**
* multiplication
*
* @param a the first factor
* @param b the second factor
*
* @return the product
*/

public static int[] multiplyAB(int[] a, int[] b) {
int[] sumProduct = new int[a.length + 1];

for (int i = 0; i < b.length; i++) {
int[] product = multiplyAB(a, b[i], i);
sumProduct = addAB(sumProduct, product);
}

return sumProduct;
}


public static String parseStr(int[] v) {
String str = "";
for (int i = v.length; i > 0; i--) {
if (v[i - 1] != 0 || !str.equals("")) {
str += v[i - 1];
}
}
return str;
}

private static int[] multiplyAB(int[] a, int b, int bIndex) {
int[] product = new int[a.length + 1 + bIndex];
int carry = 0;
for (int i = 0; i < a.length; i++) {
int tempProduct = a[i] * b + carry;
int remainder = tempProduct % 10;
carry = tempProduct / 10;

product[bIndex + i] = remainder;
}
product[bIndex + a.length] = carry;
return product;
}

public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0, 3, 5}; //3501987654321
int[] b = {1, 2, 3, 4, 5, 6, 7, 8, 9}; //987654321


int[] s = addAB(a, b);
int[] p = multiplyAB(a, b);

System.out.println(parseStr(a));
System.out.println(parseStr(b));
System.out.println(parseStr(s));
System.out.println(parseStr(p));
}

}

标签: 0 评论 | | edit post

真不忍心面对这个残忍的世界

  地震已经八十多个小时了,唉,累,都快零点呢,明天早晨醒来,不知道死亡人数又会增加多少,真不忍心面对这个残忍的世界,生命如此脆弱,唉,祈祷吧。
标签: 0 评论 | | edit post

好担心小魔女被洗脑了

  狐狸一直苦恼体重的问题,小魔女在做康宝莱的减肥产品,因为价钱太高,不敢轻易尝试。小魔女誓要把这个产品当成自己的事业来做。所以价钱虽然高,她自己现在也在亲自尝试。

  其实我真的很奇怪那种糊糊的东西真的能有减肥的效果么?不过她拿来了大量的实例,说那些人很多她都见过的。活生生的例子在眼前,怎么可能不相信?

  小魔女过来的这段时间,我对她的减肥产品真的很感兴趣,纯天然的产品,绝对不是药,可以改善体质,改善肤色,人家小贝每天都在吃。

  我不知道是我疑心重,还是经济能力不行,总是抱着将信将疑的观望态度。不过我还是很有兴趣的去听她讲解这个产品的效果,原理,和实例。不过小魔女来的时候的讲解重点却大部分集中在了,事业,前景等等。

  唉,其实我只有个朴素的愿望就是减肥,我既不愿意放弃我现在的工作,也对她所提到拥有了这个事业后的车子,房子的情况不感兴趣。唉,可能是我老了,跟不上时代了。

  我其实一直有个疑问,为什么大部分减肥成功的人,后来都发展成了她们的业务员?难道说她们之前没有工作的么?就算是减肥很成功,也不需要所有的人都去做这个产品啊。唉,很奇怪。

  唉,也许这个东西真的对减肥是很有效的,狐狸担心过多了。狐狸在想,如果小魔女自己很有效的话,我也豁出去试试了。呵呵,其实我觉得小魔女本身试不出啥太明显的效果来,因为她本身就很苗条啊。即使真的瘦5斤,谁知道是产品有效,还是自身正常的体重波动。

  狐狸最近身体不太好,风湿吧。一个月前血沉40,吃了一个月的妥抒(来氟米特片)和戴芬终于降到26,不过据医生说,治疗大概还需要至少持续半年的时间。凡事都有两面性,药效虽好,但是却有副作用,对肝脏可能有损伤,要定期监测肝脏的状况,必要的时候,还需要采取点别的措施来抵消一下对肝脏的损伤。

  小魔女说,如果过几个月试试瘦身产品的话。呵呵,其实小魔女对狐狸的态度完全是自愿,从来也没有强迫过狐狸一定要用这个产品,甚至于连推荐都不曾,只是如果狐狸自己愿意尝试,她很愿意讲解。说可以自己开个帐号自己拿产品,当然,从她那里拿也行。嘿嘿。我不想当事业来做,所以如果真拿也是在她那里来拿了。

  后来小魔女说,唉,吃了这个产品,没准对你的风湿也有效果的,这是调节内分泌的,你的抵抗力强了,你的病就好了。全天然,完全没有副作用。唉,这么说来,这东西实在比我吃的来氟米特片强多了,那药的副作用实在是够恐怖的。难道真有这等好事?

  唉,其实她这话倒是很符合某些中医的理论(当然,只是我认为的,我对中医不了解)。把人体当成系统,救助自己的灵丹妙药就存在于自己的身体内。呵呵,这段信息是前几天扫了几眼《黄帝八十一难经》的一个白话翻译的版本得到的。

  不过,我还是潜意识中有一种强烈的感觉,小魔女被洗脑了……唉,希望我错了吧。

  呵呵,小魔女看到我这个博客的时候,不知道会不会鄙视我一番……
标签: 0 评论 | | edit post