重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

現在C言語で四則演算について勉強しています。
128桁の配列をもつ整数についてa,b,各桁を加算、減算するプログラムを書きたいのですが分からなくて困ってます。できればCのソースを教えて欲しいですおねがいします。

 s = 65536 a[128],b[128],c[128] 
 i = -1 とする。
 i <128 である限り、演算を実行。 i >127なら終わり。(++1)

c(i) = a(i) - b(i)という演算を行う。 c(i) < 0 の場合 s を借りてくる。
c(i)に s を加算し、上の桁から1を引く。
 

A 回答 (4件)

long では 2^64 ≒ 10^19 までしか計算できないので、


10進数で20桁以上の整数の計算をしたいということでしょうか。
ならば以下の処理になるかと思います。


整数128桁の引き算()

// 入力は long が使えないので、文字列の10進数とします
char* ia = "12345678901234567890";
char* ib = "12345678901234567891";

// 文字列を分解して10進数の各桁を格納する配列を用意します
int a[128], b[128], c[128];

// 配列を初期化します。想定は、a[0]は1の位、a[1]は1e+1の位、a[127]は1e+128の位
a[i] = 文字列iaからi番目の文字 - '0'; // i番目が無ければ'0'
b[i] = 文字列ibからi番目の文字 - '0'; // i番目が無ければ'0'

// 各桁ごとに計算して c に代入
演算結果 = (i-1)桁のキャリー + a[i] - b[i];
キャリー = 演算結果 < 0 ? -1: 0;
 借り値 = 演算結果 < 0 ? 10: 0;
c[i] = 演算結果 + 借り値

// 最後に c を文字列化して完了
i桁目の文字 = c[i] + '0';
    • good
    • 0

難しいと思うのなら、


・桁数を128桁から減らし、2桁で考えては?
・減算は置いといて、加算のみのものを考えては?
・ループは使わずに考えては?

それで作れませんか?
2桁の配列を持つ整数について、a,b,各桁を加算するプログラム。
    • good
    • 0

・配列一桁には何が入っているのですか? 10進数で1桁分? 2進で16bit分?


・s=65536 と初期化する意味は?
・なんで i の初期値 は -1?
・(++1)という謎の表記は for(; i < 128; ++i) の意味?
・上の桁って何? a[i-1] のこと?
・なんで C で配列に括弧を使うの?
・負の数は使えるの? 
・最上位でボローが残ったらどうするの?

と突っ込みどころ満載なのですが、
ここじゃなくて C・C++ カテがよいと思いますよ。
    • good
    • 0

具体的には, 何がどうわからないんですか?

この回答への補足

C言語のソースに直して演算処理したいのですがどうしていいかわからないです。
一応、C の勉強サイトで勉強したのですが・・・
参考書を買って一から勉強し直したほうがいいのでしょうか?

補足日時:2013/11/07 15:05
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!