情報
作者名:じゅゐ
著作権:放棄
解説
四則演算を桁数制限なし、少数OK、マイナスOKで計算することができます。
依存する形で少数をきちんとした書式に直す少数処理、
なでしこでは大小を判断できない様な大きな数にも対応する大小判定
が一緒に梱包されています。
また足し算も引き算も掛け算も割り算も
必ず数値に「」や『』などで囲って文字列として引数に設定してください。
15桁以上になるとなでしこがエラーを出します。
以下、各関数の引数設定と説明と一緒にないとエラーが出るような依存関数などの説明
”割られる数”と、”割る数”を、”小数点以下~桁”まで
与えられた2数を設定した小数点以下の桁までの商を桁数無制限に演算して返す
※内部依存――引き算、掛け算、小数処理
”掛けられる数”と、”掛ける数”を
与えられた2数の積を桁数無制限に演算して返す
※内部依存――足し算、小数処理、大小判定
”引かれる数”と、”引く数”を
与えられた2数の差を桁数無制限に演算して返す
※内部依存――足し算、小数処理
”足される数”と、”足す数”を
与えられた2数の和を桁数無制限に演算して返す
※内部依存――引き算、小数処理
”処理するもの”を
与えられた数を通常の数字表記に直して返す
(例:0042.19500→42.195)
”一つ目の数”と、”二つ目の数”を
与えられた2数を、一つ目の数が大きかったら1、二つ目だったら2、同じだったら0を返す
サンプルプログラム
「123456789012345678901234567890」と「123456789012345678901234567890」を足し算を表示
// 246913578024691357802469135780と表示される
「111111111」と「111111111」を掛け算を表示
// 12345678987654321と表示される
「-12345678901234567.8901234567890」と「12345678901234567.8901234567890」を引き算を表示
// -24691357802469135.7802469135780と表示される
22と7を30まで割り算を表示
// 3.142857142857142857142857142857と表示される
本体
*割り算(数1と、数2を、割り算制限まで)
割一とは文字列=空
総当たりとは文字列=空
あまりとは文字列=空
割結とは文字列=空
桁とは文字列=空
割一¥1=数1から1文字左部分。
割一¥2=数2から1文字左部分。
もし、割一¥1=「-」ならば
数1の1から1文字削除
もし、割一¥2=「-」ならば
数2の1から1文字削除
割一¥0¥0=「」
違えば
割一¥0¥0=「-」
違えば
もし、割一¥2=「-」ならば
数2の1から1文字削除
割一¥0¥0=「-」
違えば
割一¥0¥0=「」
(数1で「.」の出現回数=0)ならば、数1=「{数1}.」
(数2で「.」の出現回数=0)ならば、数2=「{数2}.」
割一¥1=数1で「.」が何文字目
割一¥2=数2で「.」が何文字目
数1=数1の「.」を「」に置換
数2=数2の「.」を「」に置換
割一¥1=数1の文字数-割一¥1
割一¥2=数2の文字数-割一¥2
もし、割一¥1=割一¥2ならば
割一¥0¥1=数1の文字数
違えば
もし、割一¥1>割一¥2ならば
割一¥0¥1=数1の文字数-割一¥1+割一¥2
割一¥3=「0」を割一¥1-割一¥2だけリフレイン。
違えば
割一¥0¥1=数1の文字数-割一¥1+割一¥2
割一¥3=「0」を割一¥2-割一¥1だけリフレイン。
数1=「{数1}{割一¥3}」
もし、数2の文字数>13ならば
総当たり=1
違えば
総当たり=0
あまり=「」
割結=「」
桁=数1の文字数
割り算制限+割一¥0¥1回
もし、数1=「」ならば
割一¥1=「0」
違えば
割一¥1=数1から1文字左部分。
数1の1から1文字削除。
割一¥1=「{あまり}{割一¥1}」
もし、総当たり=1ならば
割一¥2=9
9回
割一¥3=数2と割一¥2を掛け算
もし、(割一¥3が割一¥1以下)ならば
抜ける
違えば
割一¥2=割一¥2-1
違えば
割一¥2=INT(割一¥1/数2)
割一¥3=割一¥2と数2を掛け算
あまり=「{割一¥1と割一¥3を引き算}」
割結=「{割結}{割一¥2}」
あまりの文字数≦15ならば
もし、あまり=0ならば
もし、数1=「」ならば
もし、回数≧割一¥0¥1ならば
抜ける
割一¥2=割結の文字数
割一¥1=割結から割一¥0¥1文字左部分。
割結の1から割一¥0¥1文字削除。
割結=「{割一¥1}.{割結}」
割結=割結を小数処理
割結=「{割一¥0¥0}{割結}」
割一¥3=あまりから割一¥0¥1文字左部分。
あまりの1から割一¥0¥1文字削除。
あまり=「{割一¥3}.{あまり}」
あまり=あまりを小数処理
割結で戻る
*掛け算(数1と、数2を)
掛一とは文字列=空
元数1とは文字列=空
掛結掛一とは文字列=空
桁とは文字列=空
桁回数とは文字列=空
計算とは文字列=空
繰上とは文字列=空
掛結とは文字列=空
掛一¥1=数1の文字数
掛一¥2=数2の文字数
掛一¥3=掛一¥1+掛一¥2
もし、(掛一¥3≦15)ならば
数1*数2で戻る
違えば
掛一¥7=数1から1文字左部分。
掛一¥8=数2から1文字左部分。
(掛一¥7=「-」)ならば、掛一¥9=1。数1の1から1文字削除
(掛一¥8=「-」)ならば、掛一¥9=掛一¥9+1。数2の1から1文字削除
掛一¥0,2=掛一¥1+掛一¥2-2
掛一¥9=掛一¥9と2の余り
掛一¥0、0=「」
(掛一¥9=1)ならば、掛一¥0、0=「-」
掛一¥3=数1で「.」が何文字目
掛一¥4=数2で「.」が何文字目
(掛一¥3=0)ならば、数1=「{数1}.」。掛一¥3=掛一¥1。
(掛一¥4=0)ならば、数2=「{数2}.」。掛一¥4=掛一¥2。
掛一¥5=掛一¥1-掛一¥3
掛一¥6=掛一¥2-掛一¥4
掛一¥0、1=掛一¥5+掛一¥6
数1の「.」を「」に置換
数1=それ
数2の「.」を「」に置換
数2=それ
元数1=数1
掛結掛一=「」
桁¥1=数1の文字数
桁¥1=((桁¥1-1)/14)を切り下げ+1
桁¥2=数2の文字数
桁回数=1
桁¥2回
計算¥2=数2から1文字右部分
数2から1文字右端削除
繰上=0
数1=元数1
桁¥1回
計算¥1=数1から14文字右部分
掛一¥1=計算¥1の文字数
数1から14文字右端削除
計算¥0=計算¥1*計算¥2+繰上
もし、計算¥0≧100000000000000ならば
繰上=計算¥0から1文字左部分
計算¥0=計算¥0から14文字右部分
違えば
繰上=0
掛一¥4=計算¥0の文字数
掛結掛一¥桁回数=「{計算¥0}{掛結掛一¥桁回数}」
もし、掛一¥1>掛一¥4ならば
掛結掛一¥桁回数=「{0を掛一¥1-掛一¥4だけリフレイン}{掛結掛一¥桁回数}」
掛結掛一¥桁回数=「{繰上}{掛結掛一¥桁回数}」
桁回数=桁回数+1
掛結=0
桁回数=1
桁¥2回
掛一¥1=「{掛結掛一¥桁回数}{0を桁回数-1だけリフレイン}」
掛結=掛結と掛一¥1を足し算
桁回数=桁回数+1
もし、掛一¥0、1=0ならば
掛結=「{掛一¥0,0}{掛結}」
違えば
掛一¥3=掛一¥0、1
掛一¥1=掛結の文字数
もし、掛一¥1<掛一¥0,2ならば
掛結=「{0を掛一¥0,2だけリフレイン}{掛結}」
掛一¥1=掛結の文字数
掛一¥2=掛結から掛一¥1-掛一¥3文字左部分
掛結の1から掛一¥1-掛一¥3文字削除
掛結=「{掛一¥0,0}{掛一¥2}.{掛結}」
掛結=掛結を小数処理
掛結で戻る
*引き算(数1と、数2を)
引一とは文字列=空
桁とは文字列=空
符号記号とは文字列=空
繰下とは文字列=空
結果とは文字列=空
M1とは文字列=空
M2とは文字列=空
結果引一とは文字列=空
引一¥1=数1の文字数
引一¥2=数2の文字数
引一¥3=引一¥1+引一¥2
もし、(引一¥3<15)ならば
数1-数2で戻る
違えば
引一¥5=数1で「.」が何文字目-1
引一¥6=数2で「.」が何文字目-1
(引一¥5=-1)ならば、数1=「{数1}.」。引一¥5=引一¥1-1。
(引一¥6=-1)ならば、数2=「{数2}.」。引一¥6=引一¥2-1。
もし、引一¥5<引一¥6ならば
引一¥7=引一¥6
違えば
引一¥7=引一¥5
引一¥3=引一¥1-引一¥5
引一¥4=引一¥2-引一¥6
もし、引一¥3<引一4ならば
引一¥8=引一¥2-引一¥6
違えば
引一¥8=引一¥1-引一¥5
もし、引一¥7+引一¥8<15ならば
数1-数2で戻る
違えば
引一¥9=数1から1文字左部分
引一¥10=数2から1文字左部分
もし、引一¥9=「-」ならば
数1から1文字右端削除
数2から1文字右端削除
もし、引一¥10=「-」ならば
数1の1から1文字削除
数2の1から1文字削除
もし、数2≧数1ならば
引一¥11=数2と数1を引き算
違えば
引一¥11=数1と数2を引き算
もし、引一¥11=「0」ならば
引一¥11=「0」
違えば
引一¥11=「-{引一¥11}」
違えば
数1の1から1文字削除
引一¥11=数2と数1を足し算
引一¥11=「-{引一¥11}」
引一¥11で戻る
違えば
もし、引一¥10=「-」ならば
数1から1文字右端削除
数2から1文字右端削除
数2の1から1文字削除
引一¥11=数1と数2を足し算
引一¥11で戻る
違えば
もし、引一¥8≠0ならば
もし、引一¥3>引一¥4ならば
引一¥0=引一¥3
引一¥5=「0」を引一¥3-引一¥4だけリフレイン
数2=「{数2}{引一¥5}」
もし、引一¥4>引一¥3ならば
引一¥0=引一¥4
引一¥5=「0」を引一¥4-引一¥3だけリフレイン
数1=「{数1}{引一¥5}」
もし、引一¥3=引一¥4ならば
引一¥0=引一¥3
違えば
引一¥0=0
数1の「.」を「」に置換
数1=それ
数2の「.」を「」に置換
数2=それ
桁¥1=数1の文字数
桁¥2=数2の文字数
もし、桁¥1≧桁¥2ならば
桁=桁¥1
違えば
桁=桁¥2
桁=INT((桁-1)/15)+1
符号記号=「」
数2と数1を大小判定
もし、それ=1ならば
符号記号=「-」
引一¥9=数1
数1=数2
数2=引一¥9
繰下=0
結果=「」
桁回
M1=数1から15文字右部分
数1から15文字右端削除
M2=数2から15文字右部分
数2から15文字右端削除
引一¥3=M1の文字数
引一¥4=M2の文字数
もし、引一¥3≧引一¥4ならば
引一¥2=引一¥3
違えば
引一¥2=引一¥4
結果引一=M1-M2-繰下
もし、結果引一<0ならば
結果引一=結果引一+1000000000000000
繰下=1
違えば
繰下=0
引一¥1=結果引一の文字数
もし、引一¥1<引一¥2ならば
結果引一=「{0を引一¥2-引一¥1だけリフレイン}{結果引一}」
結果=「{結果引一}{結果}」
もし、引一¥0≠0ならば
引一¥1=結果から(引一¥0)-1文字右部分
結果から(引一¥0)-1文字右端削除
結果=「{結果}.{引一¥1}」
引一¥9=結果から1文字左部分
もし、引一¥9=「.」ならば
結果から1文字削除
結果=「0{結果}」
結果=結果を小数処理
結果=「{符号記号}{結果}」
結果で戻る
*足し算(数1と、数2を)
和一とは文字列=空
桁とは文字列=空
結果とは文字列=空
繰上とは文字列=空
P1とは文字列=空
P2とは文字列=空
結果和一とは文字列=空
和一=「」
和一¥1=数1の文字数
和一¥2=数2の文字数
和一¥3=和一¥1+和一¥2
もし、(和一¥3<14)ならば
数1+数2で戻る
違えば
和一¥5=数1で「.」が何文字目-1
和一¥6=数2で「.」が何文字目-1
(和一¥5=-1)ならば、数1=「{数1}.」。和一¥5=和一¥1-1。
(和一¥6=-1)ならば、数2=「{数2}.」。和一¥6=和一¥2-1。
もし、和一¥5<和一¥6ならば
和一¥7=和一¥6
違えば
和一¥7=和一¥5
もし、和一¥1-和一¥5<和一¥2-和一¥6ならば
和一¥8=和一¥2-和一¥6
違えば
和一¥8=和一¥1-和一¥5
もし、和一¥7+和一¥8<14ならば
数1+数2で戻る
違えば
和一¥9=数1から1文字左部分
和一¥10=数2から1文字左部分
もし、和一¥9=「-」ならば
数1から1文字右端削除
数2から1文字右端削除
もし、和一¥10=「-」ならば
数1の1から1文字削除
数2の1から1文字削除
和一¥11=数1と数2を足し算
和一¥11=「-{和一¥11}」
違えば
数1の1から1文字削除
もし、数2≧数1ならば
和一¥11=数2と数1を引き算
違えば
和一¥11=数1と数2を引き算
和一¥11=「-{和一¥11}」
和一¥11で戻る
違えば
もし、和一¥10=「-」ならば
数1から1文字右端削除
数2から1文字右端削除
数2の1から1文字削除
もし、数2>数1ならば
和一¥11=数2と数1を引き算
和一¥11=「-{和一¥11}」
違えば
和一¥11=数1と数2を引き算
和一¥11で戻る
違えば
もし、和一¥8≠0ならば
和一¥3=和一¥1-和一¥5
和一¥4=和一¥2-和一¥6
もし、和一¥3>和一¥4ならば
和一¥0=和一¥3
和一¥5=「0」を和一¥3-和一¥4だけリフレイン
数2=「{数2}{和一¥5}」
もし、和一¥4>和一¥3ならば
和一¥0=和一¥4
和一¥5=「0」を和一¥4-和一¥3だけリフレイン
数1=「{数1}{和一¥5}」
もし、和一¥3=和一¥4ならば
和一¥0=和一¥3
違えば
和一¥0=0
数1の「.」を「」に置換
数1=それ
数2の「.」を「」に置換
数2=それ
桁¥1=数1の文字数
桁¥2=数2の文字数
もし、桁¥1≧桁¥2ならば
桁=桁¥1
違えば
桁=桁¥2
桁=INT((桁-1)/14)+1
繰上=0
結果=「」
桁回
P1=数1から14文字右部分
数1から14文字右端削除
P2=数2から14文字右部分
数2から14文字右端削除
和一¥3=P1の文字数
和一¥4=P2の文字数
もし、和一¥3≧和一¥4ならば
和一¥2=和一¥3
違えば
和一¥2=和一¥4
結果和一=P1+P2+繰上
もし、結果和一≧100000000000000ならば
繰上=1
結果和一=結果和一-100000000000000
違えば
繰上=0
和一¥1=結果和一の文字数
もし、和一¥1<和一¥2ならば
結果和一=「{0を和一¥2-和一¥1だけリフレイン}{結果和一}」
結果=「{結果和一}{結果}」
(繰上=1)ならば、結果=「1{結果}」。
もし、和一¥0≠0ならば
和一¥1=結果から(和一¥0)-1文字右部分
結果から(和一¥0)-1文字右端削除
結果=「{結果}.{和一¥1}」
結果を小数処理
それで戻る
*小数処理(元を)
桁とは文字列=空
一時とは文字列=空
桁=元の文字数
一時¥22=0
桁回
一時¥21=元から1文字左部分
もし、一時¥21=「0」ならば
元の1から1文字削除
違えば
一時¥22=1
もし、一時¥21=「.」ならば
元=「0{元}」
一時¥22=1
もし、一時¥22=1ならば
抜ける
一時¥22=0
元で「.」の出現回数
もし、それ≠0ならば
桁回
一時¥21=元から1文字右部分
もし、一時¥21=「0」ならば
元から1文字右端削除
違えば
一時¥22=1
もし、一時¥21=「.」ならば
元から1文字右端削除
一時¥22=1
もし、一時¥22=1ならば
抜ける
もし、元=「」ならば
元=「0」
元で戻る
*大小判定(一番と、二番を)
一時とは文字列=空
一時とは文字列=空
一時¥1=一番の文字数
一時¥2=二番の文字数
もし、(一時¥1<16) AND (一時¥2<16)ならば
もし、一番=二番ならば
0で戻る
もし、一番>二番ならば
1で戻る
もし、一番<二番ならば
2で戻る
一時¥1=「{一番}」
一時¥2=「{二番}」
もし、一時¥1=一時¥2ならば
0で戻る
一時¥1=一番から1文字左部分
一時¥2=二番から1文字左部分
もし、一時¥1=「-」ならば
もし、一時¥2=「-」ならば
一時¥0=「-」
一番の1から1文字削除
二番の1から1文字削除
違えば
2で戻る
違えば
もし、一時¥2=「-」ならば
1で戻る
違えば
一時¥0=「」
一時¥1=一番で「.」の出現回数。
もし、一時¥1=0ならば
一番=「{一番}.」
一時¥2=二番で「.」の出現回数。
もし、一時¥2=0ならば
二番=「{二番}.」
一番=「:{一番}」
二番=「:{二番}」
一時¥3=一番の「:」から「.」まで範囲切り取る。
一時¥4=二番の「:」から「.」まで範囲切り取る。
一時¥1=一時¥3の文字数
一時¥2=一時¥4の文字数
もし、一時¥1>一時¥2ならば
もし、一時¥0=「-」ならば
2で戻る
違えば
1で戻る
違えば
もし、一時¥2>一時¥1ならば
もし、一時¥0=「-」ならば
1で戻る
違えば
2で戻る
違えば
一時¥2回
一時¥1=一時¥3から1文字左部分
一時¥2=一時¥4から1文字左部分
もし、一時¥1>一時¥2ならば
もし、一時¥0=「-」ならば
2で戻る
違えば
1で戻る
もし、一時¥2>一時¥1ならば
もし、一時¥0=「-」ならば
1で戻る
違えば
2で戻る
一時¥3の1から1文字削除
一時¥4の1から1文字削除
一時¥1=一番の文字数
一時¥2=二番の文字数
もし、一時¥1<一時¥2ならば
一時¥1=一時¥2
一時¥1回
一時¥1=一番から1文字左部分
一時¥2=二番から1文字左部分
もし、一時¥1>一時¥2ならば
もし、一時¥0=「-」ならば
2で戻る
違えば
1で戻る
もし、一時¥2>一時¥1ならば
もし、一時¥0=「-」ならば
1で戻る
違えば
2で戻る
一番の1から1文字削除
二番の1から1文字削除
0で戻る
最終更新:2010年08月02日 12:56