54 lines
982 B
C
54 lines
982 B
C
#include <stdio.h>
|
|
#include "int20.h"
|
|
|
|
struct int20 create20(char val[]) {
|
|
// int20 deklarieren
|
|
struct int20 num;
|
|
|
|
// Länge des übergebenen Strings herausfinden. Maximal 20
|
|
int length = 0;
|
|
for (; length < 20 && val[length] != '\0'; length++);
|
|
|
|
// num.digits mit den übergebenen Ziffern auffüllen, bzw mit '0'
|
|
for (int i = 0; i < 20; i++) {
|
|
if (i < 20 - length - 1) {
|
|
num.digits[i] = 0;
|
|
} else {
|
|
num.digits[i] = val[i - 20 + length];
|
|
}
|
|
}
|
|
|
|
return num;
|
|
}
|
|
|
|
struct int20 add20(struct int20 a, struct int20 b) {
|
|
struct int20 c;
|
|
|
|
int carry = 0;
|
|
for (int i = 19; i >= 0; i--) {
|
|
|
|
char cd = a.digits[i] + b.digits[i] - '0' + carry;
|
|
carry = 0;
|
|
|
|
if (cd > '9') {
|
|
cd -= 10;
|
|
carry = 1;
|
|
}
|
|
|
|
c.digits[i] = cd;
|
|
}
|
|
if (carry != 0) {
|
|
printf("INT20 OVERFLOW\n");
|
|
}
|
|
return c;
|
|
}
|
|
|
|
|
|
void print20(struct int20 num) {
|
|
int i = 0;
|
|
for (; i < 20 && num.digits[i] == '0'; i++);
|
|
if (i >= 20) printf("0");
|
|
for (; i < 20; i++) {
|
|
printf("%c", num.digits[i]);
|
|
}
|
|
} |