#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100  // Maximale Anzahl an Zahlen

// Struktur zur Speicherung einer Zahl mit Vorkomma- und Nachkommateil
typedef struct {
   int vorkomma;       // Ganzzahliger Teil vor dem Komma
   int nachkomma;      // Nachkommateil als ganze Zahl
   int nachstellen;    // Anzahl der Nachkommastellen
} Kommazahl;

// Funktion zur Einlesung der Zahlen
int einlesen(Kommazahl zahlen[], int max) {
    char eingabe[100];         // Puffer für die Eingabezeile
    int anzahl = 0;            // Zählt, wie viele Zahlen eingegeben wurden
    printf("Gib Deine Kommazahlen ein (Abschluss mit Leerzeile)\n");
    while (fgets(eingabe, sizeof(eingabe), stdin)) { // Lies eine Zeile ein
        if (eingabe[0] == '\n') break; // Wenn die Zeile leer ist, beende die Eingabe
        Kommazahl z;                   // Neue Kommazahl-Struktur
        char *komma = strchr(eingabe, ','); // Suche das Komma in der Eingabe
        if (komma) {                   // Wenn ein Komma gefunden wurde
            *komma = '\0';             // Setze das Komma auf Stringende, trennt Vorkomma ab
            z.vorkomma = atoi(eingabe); // Wandelt den Vorkommateil in int um
            char *nachkommaStr = komma + 1; // Zeiger auf den Nachkommateil
            nachkommaStr[strcspn(nachkommaStr, "\n")] = '\0'; // Entfernt Zeilenumbruch am Ende
            z.nachstellen = strlen(nachkommaStr); // Zählt die Nachkommastellen
            z.nachkomma = atoi(nachkommaStr);     // Wandelt Nachkommateil in int um
        } else {                      // Wenn kein Komma gefunden wurde
            z.vorkomma = atoi(eingabe); // Ganze Zahl, Vorkomma ist die Zahl
            z.nachkomma = 0;            // Nachkomma ist 0
            z.nachstellen = 0;          // Keine Nachkommastellen
        }
        zahlen[anzahl++] = z;           // Speichere die Zahl im Array
        if (anzahl >= max) break;       // Wenn Maximum erreicht, abbrechen
    }
    return anzahl;                      // Gibt die Anzahl der eingegebenen Zahlen zurück
}

// Funktion zur Bestimmung der maximalen Nachkommastellen
int max_nachkommastellen(const Kommazahl zahlen[], int anzahl) {
    int max_nachstellen = 0;            // Startwert für Maximum
    for (int i = 0; i < anzahl; i++) {  // Gehe alle Zahlen durch
        if (zahlen[i].nachstellen > max_nachstellen) { // Wenn mehr Nachkommastellen gefunden
            max_nachstellen = zahlen[i].nachstellen;   // Speichere neues Maximum
        }
    }
    return max_nachstellen;              // Gibt das Maximum zurück
}

// Funktion zur Addition der Zahlen mit Skalierung
void addiere(const Kommazahl zahlen[], int anzahl, int max_nachstellen, int *summe_vorkomma, long long *summe_nachkomma) {
    *summe_vorkomma = 0;                 // Setze Summe Vorkomma auf 0
    *summe_nachkomma = 0;                // Setze Summe Nachkomma auf 0
    for (int i = 0; i < anzahl; i++) {   // Gehe alle Zahlen durch
        *summe_vorkomma += zahlen[i].vorkomma; // Addiere Vorkomma-Anteil
        int nachkomma = zahlen[i].nachkomma;   // Hole Nachkomma-Anteil
        // Skaliere Nachkomma auf die maximale Stellenzahl (z.B. 3 -> 300 bei 2 Nachkommastellen)
        for (int j = 0; j < max_nachstellen - zahlen[i].nachstellen; j++) {
            nachkomma *= 10;
        }
        *summe_nachkomma += nachkomma;         // Addiere skalierten Nachkomma-Anteil
    }
}

// Funktion zur Berechnung des Übertrags und Ausgabe
void ausgabe(int summe_vorkomma, long long summe_nachkomma, int max_nachstellen) {
    int basis = 1;                          // Basis für Nachkommastellen (z.B. 1000 für 3 Stellen)
    for (int i = 0; i < max_nachstellen; i++) basis *= 10;
    summe_vorkomma += summe_nachkomma / basis; // Übertrag von Nachkomma zu Vorkomma
    summe_nachkomma = summe_nachkomma % basis; // Rest bleibt als Nachkomma
    // Ausgabe der Summe, Nachkomma wird mit führenden Nullen ausgegeben
    printf("= %d,%0*lld\n", summe_vorkomma, max_nachstellen, summe_nachkomma);
}

int main() {
    Kommazahl zahlen[MAX]; // Array für alle eingegebenen Zahlen
    int anzahl = einlesen(zahlen, MAX); // Lies Zahlen ein, gibt Anzahl zurück
    int max_nachstellen = max_nachkommastellen(zahlen, anzahl); // Finde maximale Nachkommastellen
    int summe_vorkomma;
    long long summe_nachkomma;
    addiere(zahlen, anzahl, max_nachstellen, &summe_vorkomma, &summe_nachkomma); // Addiere alle Zahlen
    ausgabe(summe_vorkomma, summe_nachkomma, max_nachstellen); // Gib das Ergebnis aus
    return 0; // Programmende
}