質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

2回答

1476閲覧

PASCALの勉強をしています。

Tbeyonce

総合スコア26

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2016/09/08 04:52

問題
とても大きい値の計算を正確に行う問題はよく知られています。たとえば、国家の負債の計算は多くのコンピューターに重い負担をかけてきました。
この問題はR^n(Rは実数で 0.0<R<99.999 、nは0<n<=25を満たす整数)を計算するものです。

入力はRとnの値のペアの集合で構成されています。Rの値は1~6列目、 nの値は8,9列目を使っています。

出力はそれぞれの入力の行から与えられるR^nの正確な値を表した行からなります。先頭の0は出力してはいけません。値の後に続いた無意味な0も表示してはいけません。結果が整数となる場合、小数点は表示してはいけません。
▲ ▼
入力の例

95.123 12
0.4321 20
5.1234 15
6.7592 9
98.999 10
1.0100 12

出力の例

548815620517731830194541.899025343415715973535967221869852721
.00000005148554641076956121994511276767154838481760200726351203835429763013462401
43992025569.928573701266488041146654993318703707511666295476720493953024
29448126.764121021618164430206909037173276672
90429072743629540498.107596019456651774561044010001
1.126825030131969720661201

↑の問題の解答のプログラムを教えて下さい。よろしくお願いいたします。
program exponentiation(input , output) ;
var R , x : real ;
n , i : integer ;
begin
readln(R , n) ;
x := 1 ;
if (0 < R) and (R < 99.999) then
if (0 < n) and (n <= 25) then begin
for i := 1 to n do
x := x * R ;
end ;
writeln(x) ;
end .

これは不正解でした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

まずRは無理数ではなく有理数だと思います

Rが実数かつ正確に小数表記をすることを求められるなら
π(0.0<R<99.999)が入力されたらどうなるのでしょう→無限ループ

なのでRは多分有理数で
循環小数ではなく(これも1/3とか入力したら無限ループ)
しかも有効桁数5桁となるものです

log10(99999^25)=124.9998914258367
と出ましたので
あなたがすることは答えが高々125桁までの掛算と小数点位置の計算です

0から9までの数値を格納するサイズ125の配列と小数点位置を保持する変数を
Rの値と小数点位置を格納するため
計算結果とその小数点位置を格納するため
に2つずつ用意し

二つの配列で表現された数の和を計算する関数と
その関数を使って二つの配列で表現された数の積と小数点位置を同時に計算する関数と
計算結果を問題文に合わせて0を省略して出力する関数を書けば

解けるんではないでしょうか?

和の計算と積の計算は小学校で習う筆算の方法を行うだけで良いと思います
(掛算は全部計算してから足すのではなく
計算結果にいちいち足していくほうが用意する配列が少なくて済みます)

投稿2016/09/10 09:20

編集2016/09/10 09:22
e-cube

総合スコア284

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ここでは、正確に計算するのが一番のポイントです。そして、最後の桁まできっちり合わせようとするなら、ふつうの浮動小数点数ではハンドリングできません(そもそも、よく使われる2進法の浮動小数だと、0.1すら正確に出ません)。

方針としては、

  • まず、文字列になった2つの小数の掛け算を行う関数を作る(文字列以外でもいいですけど、その場合は別途で文字列との相互変換が必要になります)
  • 上で作った関数を繰り返し呼んで、目的の値を算出する

というような流れになります。

なお、教育目的でなく、実務で「正確な掛け算」が必要になった場合、何かしらのライブラリを入れて対応することとなります(言語によっては、標準サポートしていることもあります)。

投稿2016/09/08 05:41

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問