Grand Nombre de Soustraction en C

Je viens de terminer mon examen dans un cours d'introduction à C de cours environ 20 minutes. La première question à l'examen m'a pris un peu au dépourvu, et impliquait de trouver la différence de deux grands nombres.

L'objectif était de prendre deux structures (N1 et N2) par valeur, et de stocker la différence dans une structure passés par référence (N3). Nous avons été autorisés à assumer N3 a été lancé avec tous les '0'. La taille maximale que peut être n'importe quoi, de sorte que la solution reste encore à travailler si les chiffres sont plus de 100 chiffres.

Voici le code de base (d'origine peut être légèrement différent, c'est à partir de la mémoire)

#include <stdio.h>
#include <stdlib.h>
/* MAX can be any length, 10, 50, 100, etc */
#define MAX 10

struct bignum
{
    char digit[MAX];
    char decimaldigit[MAX/2];
};
typedef struct bignum bigNum;
void difference(bigNum, bigNum, bigNum *);

/*
    Original values in N1 and N2

    N1.digit = { '0', '0', '0', '5', '4', '8', '2', '0', '9', '0'};
    N1.decimaldigit { '0', '0', '0', '4', '9' };

    N2.digit = { '0', '0', '0', '4', '8', '1', '3', '1', '4', '5'};
    N2.decimaldigit { '8', '0', '1', '2', '0' };
*/

/*
    Result would be:
    N3.digit = { '0', '0', '0', '0', '6', '6', '8', '9', '4', '4'}
    N3.decimaldigit { '1', '9', '9', '2', '9' }
*/

Le problème n'est pas tant de trouver une solution à ce problème, mais que seulement environ 20 lignes ont été fournis pour la réponse complète. Ma méthode pour résoudre impliqués soustrayant les chiffres un à un, après la conversion en nombres entiers, puis les porte si le résultat est négatif. Cela a pris beaucoup plus d'espace que ce qui était prévu.

Basé sur la petite quantité de marques et de l'espace prévu à cette question, je suis porté à croire qu'il y a une assez trivial solution que je ne suis pas voyant. Quel est-il? J'ai maintenant terminé le cours, mais cette question me tracasse toujours!

Une solution complète n'est pas nécessaire, seulement le fonctionnement interne de la fonction difference.

Pas les opérateurs sur les bits sont utilisés, juste au cas où.

Pourriez-vous expliquer ce decimaldigit est censé être? Aussi, 5482090-4813145 est un peu plus de 668944. 😉
C'est des nombres à virgule flottante - <chiffres>.<decimaldigits>, par exemple, N1 est comme 5482090.00049 f.
Oh, je vois. Cela explique aussi le bizarre tout-en-un message d'erreur.

OriginalL'auteur Ian Elliott | 2009-08-22