◆桁あふれなし四則演算セット

情報

作者名:じゅゐ
著作権:放棄

解説


四則演算を桁数制限なし、少数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で戻る

タグ:

計算
+ タグ編集
  • タグ:
  • 計算

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2010年08月02日 12:56
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。