• ベストアンサー

筆算で割り算

4桁までの整数の加減乗除を筆算の形式で表示するプログラムなんですが、割り算の表示がどう直しても私の頭ではうまくいきません。どうかご助言いただければとおもいます。プログラム自体が長すぎて質問の部分に貼り付けれなかったので、補足かなにかをつかわせていただいてまた、貼り付けようと思います

質問者が選んだベストアンサー

  • ベストアンサー
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.3

なるほど・・・ えー、ここが間違いです、という指摘でなくて申し訳ないのですが、せっかく加減乗算があるのでしたら、それを使って除算を表現してみてはいかがでしょうか。 除算の解の桁数を0桁と仮定 除数が被除数より小さいあいだ 除数を10倍 仮定する除算の解の桁数を1桁増やす 以下の手順で、除算の解のn桁目から1桁目まで順に求める 除数を1/10倍 除算の解のn桁目を0と仮定 除数が被除数より小さいあいだ 被除数から除数を引く 除算の解のn桁目を1増やす ここで使っている「10倍」「1/10倍」「減算」は、いずれも既にできているはずの演算ばかりなので、問題ないはずですよね。 「大小の比較」だけは「減算」だけでなく「結果の符号の取得」が必要なので、負数の扱いをちょっと考えないといけませんけど。 さて、4桁の整数の加減乗算だけを使って上記手順を行うと、条件によっては3桁の解しか求めることができません。これでは課題の条件に合いませんよね。どうしたらいいでしょうか? 答えはとても簡単ですので、ちょっと考えてみてください。

その他の回答 (3)

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.4

わ、ごめんなさい。 桁合わせがうまくいっていませんでした。   除算の解の桁数を0桁と仮定   除数が被除数より小さいあいだ     除数を10倍     仮定する除算の解の桁数を1桁増やす   以下の手順で、除算の解のn桁目から1桁目まで順に求める     除数を1/10倍     除算の解のn桁目を0と仮定     除数が被除数より小さいあいだ       被除数から除数を引く       除算の解のn桁目を1増やす

yuki85
質問者

お礼

返信が遅くなってすいません~~丁寧な回答、本当にありがとうございました☆おかげでプログラムが完成しました!!本当にありがとうございました☆☆

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.2

どの変数が何なのか、解説はいただけるでしょうか。

yuki85
質問者

補足

あ!すいません!省略しすぎました。じつは下の細くの前に以下の文があるのですが、長すぎて掲載できませんでした(>_<)表示も、割り算の関数も入力関数と同じようにして呼び出します。 #include<iostream.h> #include<iomanip.h> const int Keta = 4 ; // 整数の桁数 const int Syousuu = 2 ; // 求める割り算の小数点以下の桁数 const int Kazu_Max = 7 ; // 割り算の途中結果の最大数 void input_data( int [], int [], int[], int[], int &, int & ) ; void divide_data( const int [], int, int, int &, double &, int, int [], int [], int [], int [] ) ; void appear_data(int, int, int, double, int, const int [], const int [] ) ; void error_data( int & ) ; main() { int r[Keta] = {0} ; // 入力された整数 int s[Keta] = {0} ; int x[Keta] = {0} ; // 一つ目の整数の各位の数 int y[Keta] = {0} ; // 二つ目の整数の各位の数 int one, two = 0 ; //計算される整数 int amari = 0 ; // 加減乗除の答え double shou = 0 ; // 少数第二位まで求める場合の商 int choice = 0 ; // 割り算の結果表示選択 int shou_way[Kazu_Max] = {0} ; // 割り算の途中結果 int shou_way2[Kazu_Max] = {0} ; int keisan[Kazu_Max] = {0} ;  int keisan2[Kazu_Max] = {0} ; // プログラムの説明 cout << "\n4桁までの整数の加減乗除を筆算の形式で表示します。" << endl; // 整数の入力 input_data( x, y, r, s, one, two ) ; while( one!=0 || two !=0 ){ //計算方法の選択 cout << "\n割り算の表示方法は余りを表示するなら0を、小数点以下2桁までを表示するなら1を入力してください。>>" << endl; cin >> choice ; // 加減乗除の計算 divide_data( x, one, two, amari, shou, choice, shou_way, shou_way2, keisan, keisan2 ) ; // 結果の表示 appear_data( one, two, amari, shou, choice, shou_way2, keisan2 ) ; //整数の入力 input_data( x, y, r, s, one, two ) ; } // プログラムの終了処理 cout << "\nプログラムを終了します。" << endl ; return 0 ; } // 入力関数 void input_data( int a[Keta], int b[Keta], int p[Keta], int q[Keta], int &ichi, int &ni ) { int figure ; cout << "\n一つ目の4桁までの整数を入力してください >>" << endl ; cin >> figure ; error_data( figure ) ; for( int i = 0 ; i < Keta ; i++ ){ ichi = figure ; p[0] = ichi ; a[i] = p[i] % 10 ; p[i+1] = ( p[i] - a[i] ) / 10 ; cout << a[i] ; } cout << "\n二つ目の4桁までの整数を入力してください(0を入力したら終了します) >>" << endl ; cin >> figure ; error_data( figure ) ; for( int i = 0 ; i < Keta ; i++ ){ ni = figure ; q[0] = ni ; b[i] = q[i] % 10 ; q[i+1] = ( q[i] - b[i] ) / 10 ; cout << b[i] ; } } // 不正入力関数 void error_data( int &value ) { while( value < -9999 || value > 9999 ){ value = 0 ; cout << "値が間違っています。" << endl; cout << "もう一度入力してください。" << endl; cin >> value ; } }

noname#30727
noname#30727
回答No.1

では補足をどうぞ

yuki85
質問者

補足

ありがとうがとうざいます~(T_T)長いので割り算の計算の部分と表示の部分だけ記載させていただきますm(_ _)m //割り算の計算をする(余りを表示) for( int i = 1 ; i < Keta + 1 ; i++ ){ warizan2[i] = warizan[i-1] * 10 + a[4-i] ; ans[i] = warizan2[i] / ni ; ans2[i] = ni * ans[i] ; warizan[i] = warizan2[i] - ans2[i] ; } warizan2[5] = warizan[4] ; waru = static_cast< float >(ichi) / static_cast< float >(ni) ; rem = ichi % ni ; }else{ // 割り算の計算をする(小数第2まで表示) ; warizan2[7] = warizan[6] ; waru = static_cast< float >(ichi) / static_cast< float >(ni) ; for( int i = 1 ; i < Keta + 1 ; i++ ){ warizan2[i] = warizan[i-1] * 10 + a[4-i] ; ans[i] = warizan2[i] / ni ; ans2[i] = ni * ans[i] ; warizan[i] = warizan2[i] - ans2[i] ; } for( int i = 1 ; i < Syousuu + 1 ; i++ ){ warizan2[3+i] = warizan[3+i-1] * 10 ; ans[3+i] = warizan2[3+i] / ni ; ans2[3+i] = ni * ans[3+i] ; warizan[3+i] = warizan2[3+i] - ans2[3+i] ; } // 割り算の表示 cout << "\n割り算" << endl; if( judge == 0 ){ cout << " " << setw(9) << setprecision( 0 ) << setiosflags( ios :: fixed ) << waru << "・・・・・" << rem << endl; cout << " -------------------" << endl; cout << setw(4) << ni << " ) " << ichi << endl; for( int i = 1 ; i < Keta + 1 ; i++ ){ cout << setw(7+i) << warizan2[i] << endl; cout << setw(7+i) << ans2[i] << endl; cout << " ----------------" << endl; } }else{ cout << " " << setw(9) << setprecision( 2 ) << setiosflags( ios :: fixed | ios :: showpoint ) << waru << endl; cout << " -------------------" << endl; cout << setw(4) << ni << " ) " << ichi << endl; for( int i = 0 ; i < Keta + Syousuu ; i++ ){ for( int j = 0 ; j < i ; j++ ) cout << " " << setw(7+i) << ans2[i] << endl; cout << " ----------------" << endl; for( int j = 0 ; j < i ; j++ ) cout << " " << setw(7+i) << warizan2[i+1] << endl; }

関連するQ&A

  • 加減剰余を筆算で表示したい

    加減剰余を筆算の形式で表示するプログラムを作りたいんです。でも、割り算と掛け算は中途計算も表示しなくてはならなくてどうやっていいのかわかりません。関数を使用して作りたいんですが・・・ご助力お願いいただければと思います。

  • あぁ…愕然…筆算が出来ない。

    先日、ある場所で三桁の数字の掛け算をすることになりました。 突然のことで、電卓など持っていなくて、その場所は携帯電話禁止だったので、携帯の電卓機能を使うことも出来ず、筆算でしようとしたところ…筆算の仕方がわからなかったんです。 最近は計算機ばかりを使い、パソコンでは勝手に計算をしてくれるので「小学生の頃のように紙に書いて計算するって言うことが苦手になってきたな。」とは思っていたのですが…。 それで質問なんですが、ネット上で「筆算の掛け算・割り算」「分数の掛け算・割り算」などの問題が乗っているサイトはないでしょうか? 今日、本屋さんで見てきたのですが、これと言ったものを見つけられませんでした。 よろしくお願いします。 …しかし筆算が出来なくなっているなんて…。

  • アセンブリ言語の質問です。8086アセンブラで「筆算的加減算」のプログ

    アセンブリ言語の質問です。8086アセンブラで「筆算的加減算」のプログラムを組むことになりました。 2個の整数(3桁)を入力し、入力エラーも処理する様にしなければなりません。また、   123     234         1        100 +456    -123     +999       -200 ーーーー   ----    ----     ----  579      111      1000       -100 のように表示する事が条件になっています。 プログラムを組む上で、何かアドバイスやヒント等、教えていただけないでしょうか・・?

  • プログラム

    「一行に書かれた式(文字列)の値を求めるプログラム」 少なくとも2つの2桁までの正の整数値の加減乗除ができること。 このプログラムのやりかたがわかりません、教えてください。。

  • 16進数のままで加減乗除

    2つの値を10進数でユーザーが入力して、それを16進数に変換し、16進数のままで加減乗除をするプログラムを考えています。ただ答えるだけではなく、筆算形式で答えを出さなければならないので、なかなかできません。教えてください。

  • Excelでの割り算について

    Excelで割り算をするとき たとえば 10割る3 1) 何の条件もなければ =10/3 で " 3.33 " 2) 整数部のみ欲しいときは =INT(10/3)  もしくは =QUOTIENT(10/3) で " 3 "  3) 余は =MOD(10,3) で " 1 "  を得ることができます 4) 割り算の答えの小数部分を表示するにはどうしたら良いのでしょうか  つまり "0.33 " とし小数点以下の桁数は任意で可能選択とするには ? ぜひ教えてください、お願いいたします。

  • わり算の結果が整数でも小数点以下4桁まで表示されてしまう!

    わり算の結果が整数でも小数点以下4桁まで表示されてしまう! 同じような質問で恐縮なのですが、 例えば、100、101というデータをMySQLの算術演算子/を使って2で割ると、 50.0000、50.5000のように、整数だろうが小数だろうが、小数点以下4桁まで出てしまいます。 これを、いろんな関数を駆使して50、50.5にすることはできますか。 50、51または50.0、50.5のように小数点の位置を同じずつ動かすことはできるのですが、これでは嫌だなぁと思った次第です

    • ベストアンサー
    • MySQL
  • java プログラムに関連する問題です。

    ブラウザ上で2個の整数を入力してサーブレットにそれらの加減乗除を依頼して計算結果をもらう。アクセスや表示の手順などは任意形式。

  • 教えてください

    学校の課題で、割り算を筆算の形式で表示するプログラムを作りたいのですが、voidを使用して結果表示関数と割り算の関数を別に作って作りたいのです。printfなどはまだ未習なのでfor,while,if~else,などごく初心者向けのものをしようした方法で教えていただけないでしょうか

  • 電卓プログラムを作りたい。

    わたしは、プログラムの初心者なのですが、力不足でプログラムが作れないのでご協力おねがいします。 データをすべて整数で演算子は、1個だけ用い、標準入力を受け取り、リターンキーが押されると、その解答を標準出力に表示するような、加減乗除の四則演算と整数剰余の演算を繰り返し行うことが可能な電卓プログラムを作りたいのですが、、、。

専門家に質問してみよう