約 20 分前に入門 C コースの試験を終えたところです。試験の最初の質問は、私をやや不意を突かれたもので、2 つの大きな数の違いを見つけるというものでした。
目標は、2 つの構造体 (N1 と N2) を値で取得し、その違いを参照渡しの構造体 (N3) に格納することでした。N3 はすべて「0」で開始されたと想定できます。MAX サイズは何でもかまいませんので、数値が 100 桁を超える場合でもソリューションは機能する必要があります。
ベースコードは次のとおりです(元は少し異なる場合があります。これはメモリからのものです)
#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' }
*/
問題は、この問題の解決策を見つけることではありませんが、完全な回答に対して約 20 行しか提供されていません。私の解決方法は、整数に変換した後に数字を 1 つずつ減算し、結果が負の場合は適切なキャリーを作成することでした。これは、提供されたものよりもかなり多くのスペースを必要としました。
この質問に与えられたわずかなマークとスペースに基づいて、私が見ていないかなり些細な解決策があると信じるに至りました。それは何ですか?私はコースを終了しましたが、この質問はまだ私を悩ませています!
完全なソリューションは必要ありません。関数の内部の仕組みだけですdifference
。
念のため、ビット単位の演算子は使用しないでください。