#include #include "numbers.h" /* Converts the given number to its representation modulo 2*10^{SIZE} */ void number2modular(Number number) { int i; if (number[SIZE] == 0) /* positive number */ return; /* Subtract from 2*10^{SIZE} */ for (i = 0; number[i] == 0; i++); /* skip zeros */ if (i == SIZE) { /* number is -0 */ number[SIZE] = 0; /* remove the -ve sign */ return; } /* First non-zero digit, subtract from 10 */ number[i] = 10 - number[i]; /* Subtract remaining digits from 9 */ for (i++; i < SIZE; i++) number[i] = 9 - number[i]; return; } /* end of number2modular() */ /* Adds the two numbers modulo 2*10^{SIZE} */ void add_numbers(Number num1, Number num2, Number num3) { int carry; /* Stores the carry value */ for (int i = 0, carry = 0; i <= SIZE; i++) { num3[i] = num1[i] + num2[i] + carry; if (num3[i] > 9) { /* new carry created */ num3[i] = num3[i] - 10; carry = 1; } else /* no carry created */ carry = 0; } if (num3[SIZE] == 2) { /* sum too large */ num3[SIZE] = 0; /* Go modulo 2*10^{SIZE} */ } if (num3[SIZE] == 3) { /* sum too large */ num3[SIZE] = 1; /* Go modulo 2*10^{SIZE} */ } return; } /* end of add_numbers() */