2017-06-14 57 views
0

今天我有一个采访和面试官要求做一个程序增加两个数字,我感到震惊,他怎么能给一个简单的问题,但问题是不同的加两个数字,扭曲的是数字的长度可以非常大

两个数的长度可以是任何东西(10,20,30甚至1000等)

  • ,如果你将其转换为int,双,长双若数量大于他们的范围比答案可能是错误的。

请帮我解决这个问题。

+0

比请提供链接。 –

+0

您可以在标签中找到大量重复项[tag:bigint] –

+0

无限长度数字?根据[Knuth](https://en.wikipedia.org/wiki/Algorithm_characterizations#1968.2C_1973_Knuth.27s_characterization)“一个算法必须总是在有限步数后终止”,所以不可能有这样的算法。什么样的傻人会要求你编写一个没有有效算法的程序?你确定他们没有要求如何添加任意数量的有限长度吗? – pjs

回答

1

你总是可以把数组中的两个数字(即数组有数字的数字作为元素)并添加它们,因为我们手动添加,即从一个数字开始并存储进位,如果它存在,那么执行十位数,然后是百位数等等。

说你要添加123和329

X = 123, X[] = [1,2,3] 
Y = 329, Y[] = [3,2,9] 

你开始与一个人的数字(最右边或最后一个元素),并添加X和Y数组的元素,并添加进到它(初始设置到0)。如果加数大于10,则设置为carry = sum/10(因为我们正在添加每个元素,所以这个进位应始终为0或1)并且加上add [i] = sum % 10。重复,直到所有更小阵列的元素结束。然后将进位添加到更大数组的其余元素,继续上述逻辑。

carry = 0 
Step 1 : 3 + 9 + carry (0) = 5, carry => 12/10 = 1, add => 12 % 10 = 2 
Step 2 : 2 + 2 + carry (2) = 6, carry => 6/10 = 0, add => 6 % 10 = 6 
Step 3 : 3 + 1 + carry (0) = 4, carry => 4/10 = 0, add => 4 % 10 = 4 

ANS = 462

显然,阵列中存储总和可以具有一个额外的位,以便照顾这一点。

+1

但是,如果我们存储进位,我们如何识别这个进位是哪个索引。 –

+0

您只需要一个进位,并在添加每个相应的数字后将其设置为零或一。 –

+0

@JeeVanTiWari在答案中增加了一个例子。应该很容易转换成代码。 –

相关问题