| ↓関数の内容ここから
頂上加減: Local 桁番号 位1 桁番号1 位2 桁番号2 計算結果 計算番号 Do Incr 桁番号 位1[桁番号] = 0 位2[桁番号] = 0 計算結果[桁番号] = 0 Loop While (桁番号 < Max(Len(Args(1)),Len(Args(2)))) Do Incr 桁番号1 If 桁番号1 > Len(Args(1)) Then Break EndIf 位1[桁番号1] = (位1[桁番号1] + Mid(Args(1),(((桁番号1 - Len(Args(1))) - 1) * -1),1)) Loop While (0 = 0) Do Incr 桁番号2 If 桁番号2 > Len(Args(2)) Then Break EndIf 位2[桁番号2] = (位2[桁番号2] + Mid(Args(2),(((桁番号2 - Len(Args(2))) - 1) * -1),1)) Loop While (0 = 0) Do Incr 計算番号 Switch Args(3) Case 和 If (位1[計算番号] + 位2[計算番号]) >= 10 Then 計算結果[計算番号] = (計算結果[計算番号] + Right((位1[計算番号] + 位2[計算番号]),1)) 計算結果[(計算番号 + 1)] = (計算結果[(計算番号 + 1)] + 1) Set 繰り上げ繰り下げ Else 計算結果[計算番号] = (計算結果[計算番号] + (位1[計算番号] + 位2[計算番号])) EndIf Case 差 If (位1[計算番号] - 位2[計算番号]) < 0 Then 計算結果[計算番号] = (計算結果[計算番号] + Right(((位1[計算番号] + 10) - 位2[計算番号]),1)) 計算結果[(計算番号 + 1)] = (計算結果[(計算番号 + 1)] - 1) Set 繰り上げ繰り下げ Else 計算結果[計算番号] = (計算結果[計算番号] + (位1[計算番号] - 位2[計算番号])) EndIf EndSw Loop While (計算番号 < Max(Count(位1),Count(位2)))
↑関数の内容ここまで
この後は現在、Returnコマンドしか使用しておらず 指定している引数は前述の配列変数の羅列です。 処理の中で明らかな計算ミスをしており 思い通りの値が出せない状態ですが、 これはあとで修正します。 そして、この計算ミスはゼロ化けの原因ではありません。 今は配列変数でゼロ化けしなければいいのです。
上記の繰り上げ繰り下がりミスを除いても 15桁以上を算出する確率が高いです。
これがオリジナルの関数の内容です。
|