Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <stdbool.h>
- struct BigDecimal {
- int size;
- int digits[30];
- int E;
- int sign;
- };
- void printArrayResult(int *res, int size) {
- for (int j = 0; j < size; j++) {
- printf("Element[%d] = %d\n", j, res[j]);
- }
- }
- void printNumber(int num) {
- printf("Number = %d\n", num);
- }
- int compare(int *a, int *b, int arraySize, int index) {
- int val1 = a[index];
- int val2 = b[index];
- if (val1 == val2) {
- return compare(a, b, arraySize, index + 1);
- }
- if (val1 > val2) {
- return 1;
- } else {
- return -1;
- }
- }
- void minus(int array1[], int array2[], int size, int returnArray[]) {
- int borrow = -1;
- for (int i = size - 1; i >= 0; i--) {
- if (array1[i] < array2[i]) {
- borrow = i - 1;
- array1[i] += 10;
- }
- int res = array1[i] - array2[i];
- if (borrow == i) {
- borrow = -1;
- res--;
- }
- returnArray[i] = res;
- }
- }
- void incrementResult(int resultArray[], int index) {
- resultArray[index]++;
- if (resultArray[index] >= 10) {
- incrementResult(resultArray, index - 1);
- resultArray[index] -= 10;
- }
- }
- void divide(int array1[], int array2[], int size, int returnArray[]) {
- int compareResult = 0;
- do {
- incrementResult(returnArray, size - 1);
- minus(array1, array2, size, array1);
- printArrayResult(array1, size);
- compareResult = compare(array1, array2, size, 0);
- printNumber(compareResult);
- } while (compareResult > 0);
- }
- int main() {
- struct BigDecimal number1 = {
- .size = 3,
- .E = 0,
- .sign = 1,
- .digits = {1, 0, 0}
- };
- struct BigDecimal number2 = {
- .size = 3,
- .E = 0,
- .sign = 1,
- .digits = {0, 2, 0}
- };
- int divRes[number1.size];
- divide(number1.digits, number2.digits, number1.size, divRes);
- printArrayResult(divRes, number1.size);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement