The problem number 13 asked to find the first 1o digits of the sum of 100 50-digit numbers. Well, it was a pretty straight forward task. I think the purpose of this problem was to build an adder to add any large numbers. So I created a new class called BigNumber which stores the numbers as an arraylist of integers.
Here is my code:
public class Problem_13 {
private static int s_numberOfDataRows = 100;
public String addNumbers() throws IOException {
BigNumber[] numbers = readNumbersFromFile();
return BigNumber.add(50, numbers).toString();
}
private BigNumber[] readNumbersFromFile() throws IOException {
String fileName = "problem_13.in";
BigNumber[] numbers = new BigNumber[Problem_13.s_numberOfDataRows];
BufferedReader bufferedReader = new BufferedReader(new FileReader(new File(fileName)));
for (int i = 0; i < Problem_13.s_numberOfDataRows; i++)
numbers[i] = new BigNumber(bufferedReader.readLine());
return numbers;
}
public static void main(String[] args) throws IOException {
System.out.println(new Problem_13().addNumbers());
}
}
class BigNumber {
ArrayList<Integer> m_digits;
public BigNumber(String number) {
int lengthOfNumber = number.length();
m_digits = new ArrayList<Integer>(lengthOfNumber);
for (int i = lengthOfNumber - 1; i >= 0; i--)
m_digits.add(number.charAt(i) - '0');
}
public BigNumber(int sizeOfBigNumber) {
m_digits = new ArrayList<Integer>(sizeOfBigNumber);
}
public int getDigitAtIndex(int index) {
return index < m_digits.size() ? m_digits.get(index) : 0;
}
public void insertDigit(int position, int digit) {
m_digits.add(position, digit);
}
public String toString() {
int size = m_digits.size();
StringBuffer number = new StringBuffer(size);
for (int i = 0; i < size; i++)
number.insert(0, getDigitAtIndex(i));
return number.toString();
}
public static BigNumber add(int maxLength, BigNumber... numbers) {
BigNumber sum = new BigNumber(maxLength);
int carry = 0;
for (int i = 0; i < maxLength; i++) {
int partialSum = carry;
for (BigNumber number : numbers)
partialSum += number.getDigitAtIndex(i);
sum.insertDigit(i, partialSum % 10);
carry = partialSum / 10;
}
if (carry != 0)
sum.insertDigit(maxLength, carry);
return sum;
}
}
Popularity: 14% [?]
Related posts:
