- ベストアンサー
数値計算の~
プログラムについて全くわからないので教えて下さい。 アドバイスでもいいのでお願いします! (1)FORTRANの関数MODや、Cの演算子%を使わないで「余り」を求める方法(プログラム)を教えてください。 (2)Nを金額(整数型で単位は円)とするとき、 (1) 100円未満を切り捨てる (2) 10円未満を切り上げる (3) 1000円未満を四捨五入する ためのプログラム(全部で3本)を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
(1) int n = 10, x = 3; int amari = n - ((n / x) * x); (2) 1. int n = 123; int res = (n / 100) * 100; 2. int n = 123; int res = ((n / 10) + (n % 10 ? 1 : 0)) * 10; 3. int n = 1234; int res = ((n / 1000) + (n % 1000 > 500 ? 1 : 0)) * 1000; C です。こんなもんでどうでしょう?
その他の回答 (3)
- yatokesa
- ベストアンサー率40% (201/496)
>(2)の2のところで、式の意味は分かるのですが、『?』と『:』の意味は何ですか? C言語の 三項演算子 といって、 A ? B : C の A が真なら B の値、A が 偽 なら C の値をとるというものです。VB系なら iif 文と同じようなものです。ですから、 n % 10 ? 1 : 0 の場合、n を 10 で割った余りが 0 (偽)なら 0、余りが 0ではない(真)なら 1 の値を取ります。 n % 1000 > 500 ? 1 : 0 '>' は不等号記号です。n % 1000 が 500 より大きければ 1、500未満なら 0 の値を取ります。 ただ、この方法よりも #1 さんの回答の方がよいですね。それと、整数型で変数を宣言していることが前提で、#3さんのご指摘されていた 整数化の処理は省略しています。VB系や perl等、変数の型が不定の言語系では明示的にまるめないと期待通りの動作になりません。#蛇足ですが... ちなみに三項演算子は「見にくい(解りにくい)」とよく言われ、余り好まれないようです。#私は好きなんですけどね(汗。
お礼
ありがとうございます。
- imogasi
- ベストアンサー率27% (4737/17069)
#1に既にご解答がありますが、コーディングでは (2)は整数を出す関数INTがあるとして(ほとんどの言語にあり),実例で説明すると、273や2890をnとしてください。n=273 a=100*int(n/100)等のコードとなります。 100*int(273/100) 273-->200 10*int((273+9)/10) 273-->280 1000*int((2890+500)/1000) 2890-->3000
お礼
ありがとうございます。
- Big_rice_field
- ベストアンサー率36% (15/41)
使用する言語の指定が無いので考え方だけです。 (1)使用する変数型は整数として X÷Y=Z X-Y×Z=余り (2)の (1)は100で割って100倍してください。 (2)9を加えて10で割って10倍してください。 (3)500加えて1000で割って1000倍してください。
お礼
ありがとうございます。
お礼
ありがとうございます。 ちょっとお聞きしたいのですが、 (2)の2のところで、式の意味は分かるのですが、『?』と『:』の意味は何ですか? あと、(2)の3の『>』の意味もよかったら教えてください。