增加两个数字,扭曲的是数字的长度可以非常大

时间:2017-06-14 16:32:02

标签: java c swift

今天我接受了一次采访,面试官要求制作一个增加两个数字的程序,我很震惊他怎么能提出一个简单的问题,但问题是不同的

  

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

  • 如果你将它转换为int,double,long double如果数字大于它们的范围而不是答案可能是错误的。

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

你总是可以在数组中取两个数字(即数组中有数字的数字作为元素)并在我们手动添加时添加它们,即从一个数字开始并存储进位(如果它存在)然后为10位数字,然后是数百位数字等做同样的事情。

假设您要添加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

显然,存储和的数组可能只有一位数,所以也要照顾它。