実行するために5つのエリアに分かれています。
1.高精度の番号が格納され、I「クリア神ブック」int配列は、データを格納するint型の長さを示す構造体bignを使用することを含むに従って、当然のことながら、便宜のために、我々は、法線方向や図形のサイズの配列方向を記憶しますそれどころか、私たちはとても便利なの後に計算、小型低次数の配列を格納しています
2.さらに、さらには直接のシミュレーションをする必要があり、あまり他ではないと言って、ライン上のキャリーキャリーを格納するのに使用することを忘れないでください
2.減算は、減算は、それは、先頭の0を除去するために、最終的に高い場所-1 +10自身の位置、及び両方のより高い接地ボローであります
4.乗算、乗算も簡単なアナログであり、2つずつ、すべての数は、乗算した後、合計します
すべてのシミュレーション全体のプロセスの最初の5部門では、それはまた、アナログ持っているものの部門は、最も困難なものですが、あなたがた回数で割った高精度、高精度が少し難しく使用し、明確にする必要があります。
入力された被除数A、除数B
各サイクルの残り=配当+ 10 *除数による被除数と現在位置の数(すなわち、我々の除数入力除数B)、もし
(1)十分に加えて、それはビジネス、そして新たな余りになるだろう
除去されない場合(2)、被除数が残りに直接割り当てられ
次のランの全ビットまで、ループに入ります
そこには、高精度の正確さによって分割されるため、(1)どのように除去される技術は、あるので、私は内蔵分割を使用することができない、減算分割をシミュレートするためにここで使用される(すなわち、減少がなくなるまで減少し続けます)
書式#include <iostreamの> 書式#include <stdio.hに> する#include < 文字列 > の#include <CStringの> 使用して 名前空間はstd; const int型のmax_size = 1000年。 構造体bign { INT D [MAX_SIZE]。 int型のlen; bign(){ LEN = 0 。 memsetの(D、0、はsizeof (d)参照)。 } }。 bign to_bign(文字列strの){ bign大きいです。 INTのサイズ= str.size()。 big.len= サイズ; のために(int型 I = 0 ; I =サイズ; ++!I) big.d [I] = STR [サイズ- 1。 - -i] ' 0 ' ; // 文字列はchar型intに変換されることに注意してください、-'0「で作業使用 リターン;ビッグ } 追加をbign(bign A、B bign){ bign Cを、 int型キャリー=で0 ; のため(int型 I = 0を I <= a.len-; 1。 || Iに< b.len- = 1 ; ++ I){ int型のキャリー付きTEMP = ADの+ [I] + BD [I]、 CD [c.len ++] = TEMP%以下10 ; キャリー = TEMP / 10 。 } もし(!キャリー= 0 ){ CD [c.len ++] = キャリー。 } 戻りC。 } int型CMP(bign bをbign){ int型のI。 もし(a.len> = b.len) I = a.len。 他の I = b.len。 用(; I> = 0 ; i-- ){ 場合(AD [i]が> BD [i])とリターン 1 。 それ以外の 場合(広告[I] <BD [i])とリターン- 1 ; } 戻り 0 ; } bignサブ(bign A、B bign){ // AB&すなわちA> Bを確保する bignのCと、 のための(int型 I = 0 {; Iはa.len <Iは++) // Aそれは確かに長い IF(AD [I] -bd [I] < 0 ){ AD [Iが + 。1 - ] ; AD [I] + = 10 ; } CD [c.len ++] = AD [ I] - BD [I]; } // プリアンブル0を排除 しながら(c.len-を1 > = 1&& CD [c.len- 1 ] == 0 ){ c.len - 。 } 戻りC。 } bign(bignのB、bign)マルチ{ bignのC; 以下のために(int型私= 0 ; iがa.len <; ++ i)が{ INT、M = AD [i]は、 用(INT J = 0 ; J <b.len; ++ J){ int型の TEMP = CD [iがjは+] +のm *のBD [J]。 CD [iが jは+] =一時%10 。 CD [iが + J + 1 ] + = TEMP / 10 。 } } IF(CD [a.len + b.len- 1。!] = 0 ) c.len = a.len + b.len; 他 c.len + = a.len b.len- 1。; 返すCを; } // ああ書くこと懸命精度で割った精度、オリジナルカードIアナログ分周減算 bignのresult_n; bign remain_n; bign分割(bign A、B bign){ // A / Bの INTのビット= B .LEN; bignが残っ; bign SUB1、 文字列result_str; のための(INT I = a.len- 1。 ; I> = 0 ; - I){ 残る=マルチ(まま、to_bign(" 10 "))。// 余数* 10 の文字列strの。 STR + =(' 0 ' + AD [I])。 SUB1は、 = (to_bign(STR)、残っている)を追加。 INT if_bigger = CMP(SUB1、B)。 もし(if_bigger> = 0 ){ // 法模拟除法 INTカウント= 0 ; 一方(CMP(SUB1、B)> = 0 ){ SUB1 = サブ(SUB1、B)。 カウント ++ ; } result_str + =(' 0 ' +カウント)。// 存下商が 残る= SUB1。// 保留此次余数 } 他{ まま = SUB1。 } } result_n = to_bign(result_str)。 remain_n = 残っています。 } ボイドprint_bign(bign b)は{ ため(int型 I = b.len- 1 ; I> = 0 - ; I) のprintf(" %dの"、BD [I])。 } のInt メイン(){ freopenは(" in.txt "、" R&LT " 、STDIN); 文字列STR1、STR2、 CIN >> 0009のSTR2; // 書き込み文字列オブジェクトまたはCINと>>文字列とCOUT < <文字列、scanf関数を使用しないで、printfの、そうでなければ問題がある bign B1 = to_bign(0009); bign B2 = to_bign(STR2)は、 部門(B1、B2); print_bign(result_n); のprintf(" " ); print_bign(remain_n) ; 戻り 0 ; }