<分区>
今天我去面试,面试官要求编写一个两个数相加的程序,我很震惊他怎么能给出一个简单的问题,但问题却不同
the length of two number can be anything (10,20,30 or even 1000 etc.)
- 如果你将它转换为 int,double,long double 如果数字大于它们的范围,则答案可能是错误的。
请帮我解答这个问题。
<分区>
今天我去面试,面试官要求编写一个两个数相加的程序,我很震惊他怎么能给出一个简单的问题,但问题却不同
the length of two number can be anything (10,20,30 or even 1000 etc.)
请帮我解答这个问题。
最佳答案
您始终可以将这两个数字放入数组中(即数组将数字的数字作为元素)并在我们手动添加时添加它们,即从一个数字开始并存储进位(如果存在)然后对十位数字执行相同的操作,然后是百位等等。
假设您要添加 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] = 总和 % 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
答案 = 462
显然,存储总和的数组可能多出一位数字,因此也要注意这一点。
关于java - 两个数相加,twist就是数的长度可以很大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44550175/