ich habe eine frage zwecks der bignum programmieraufgabe (siehe [leicht bis schwer] BigNum selbstgemacht ) die ich nun angefangen habe zu lösen.
ich hoffe das mir wer ernsthaft dabei hilft.
ich poste mal meinen code, muss aber dazu sagen dass das erst der anfang der lösung ist, eigentlich nur ein erster test für die addition, da wird sich noch einiges ändern also keine angst.
nur dass das mal gesagt wurde, bevor mein code wieder in der luft zerrissen wird...
also die funktion convert() funktioniert definitiv, habe ich schon getestet, aber bei der stelle "printf("%s + %s = %s\n", zahl1.content, zahl2.content, zahl3.content);" und dem damit einhergehenden funktionsaufruf von addition() stimmt etwas nicht.
denn wenn ich diese zeile im code lasse, kommt ein falsches ergebnis raus und ich weiss nicht warum.
deswegen hoffe ich das jemand erkennt was der fehler ist und mir helfen tut
also das ist nur die erste struktur, das mit 4^4096 usw und multiplikationen mache ich dann alles noch in extra funktionen, aber eins nach dem andren.
ich hoffe das mir wer ernsthaft dabei hilft.
ich poste mal meinen code, muss aber dazu sagen dass das erst der anfang der lösung ist, eigentlich nur ein erster test für die addition, da wird sich noch einiges ändern also keine angst.
nur dass das mal gesagt wurde, bevor mein code wieder in der luft zerrissen wird...
also die funktion convert() funktioniert definitiv, habe ich schon getestet, aber bei der stelle "printf("%s + %s = %s\n", zahl1.content, zahl2.content, zahl3.content);" und dem damit einhergehenden funktionsaufruf von addition() stimmt etwas nicht.
denn wenn ich diese zeile im code lasse, kommt ein falsches ergebnis raus und ich weiss nicht warum.
deswegen hoffe ich das jemand erkennt was der fehler ist und mir helfen tut

Code:
#include <stdio.h>
#include <stdlib.h>
struct number {
char *content;
int length;
};
char *convert(char numstring[], int length) {
char *num;
num = calloc(length, sizeof(char));
for(int i=0; i<length; i++) {
num[i] = numstring[i];
}
return num;
}
char *addition(char *num1, char *num2, int length) { // voraussetzung: num1 geq num2
char *newnum;
newnum = calloc(length + 1, sizeof(char));
int c = 0, tmp; // c = übertrag
for(int i=length-1; i>0; i--) {
if(tmp = ((int) num1[i] + (int) num2[i] + c) > 9) {
newnum[i] = tmp - 10;
c = 1;
} else {
newnum[i] = tmp;
c = 0;
}
}
if (c > 0)
newnum[0] = 1;
else {
char *newnewnum;
newnewnum = calloc(length, sizeof(char));
for (int i=0; i<length; i++) {
newnewnum[i] = newnum[i+1];
}
free(newnum);
return newnewnum;
}
return newnum;
}
int main() {
struct number zahl1;
zahl1.content = convert("123456789", 9);
struct number zahl2;
zahl2.content = convert("987654321", 9);
struct number zahl3;
zahl3.content = addition(zahl1.content, zahl2.content, 9);
printf("%s + %s = %s\n", zahl1.content, zahl2.content, zahl3.content);
return 0;
}
also das ist nur die erste struktur, das mit 4^4096 usw und multiplikationen mache ich dann alles noch in extra funktionen, aber eins nach dem andren.
Zuletzt bearbeitet: