約20分前に入門Cコースで試験を終えました。試験の最初の質問は私に多少のガードをかけてくれました。その違いを見つけるには2つの大きな数字が必要でした。Cでの大きな数値の減算
目標は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
。
ビット単位の演算子を使用する必要はありません。
「decimaldigit」となるべきことを説明できますか?また、5482090-4813145は668944を少し上回っています;) – avakar
浮動小数点数 -です。 N1は5482090.00049fに似ています。 –
ああ、そうだ。それはまた、奇妙なoff-by-oneエラーを説明します。 – avakar