flash on 2010-10-7
♥0 |
Line 102 |
Modified 2010-10-07 13:41:33 |
MIT License
archived:2017-03-20 05:36:53
ActionScript3 source code
/**
* Copyright enecre ( http://wonderfl.net/user/enecre )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/hU6b
*/
package {
import flash.text.TextField;
import flash.display.Sprite;
public class FlashTest extends Sprite {
private var tf:TextField = new TextField();
public function FlashTest() {
// write as3 code here..
tf.width = 465;
addChild(tf);
var n:Int_ = new Int_("12345678987654321");
tr(n.add(new Int_( "11111111011111111"))
.subtract(new Int_("23333333333333333"))
.multiple(new Int_("2")));
tr(new Int_("00000").len);
}
private function tr(...o:Array):void{
tf.appendText(o + "\n");
tf.scrollV = tf.maxScrollV;
}
}
}
import flash.utils.Timer;
class Int_{
private var _len:int;
private var _digits:Vector.<int>;//0 ~ 999999,下位ビットから順に並んでいる
public function get len():int{return _len;}
public function get digits():Vector.<int>{return _digits;}
private function parse():void{
var l:int = _digits.length;
while(l--){
if(_digits[l] == 0)_digits.pop();
else break;
}
_len = digits.length;
}
public function Int_(val:String){
_len = 0;
_digits = new Vector.<int>();
var l:int = val.length;
while(l > 6){
_digits[len] = int(val.substr(l - 6, 6));
_len++;
l -= 6;
}
_digits[len] = int(val.substr(0, l));
_len++;
parse();
}
public function add(val:Int_):Int_{
var l:int = val.len;
for(var i:int = 0; i < l; i++){
if(i >= _len){
_digits[i] = val.digits[i];
}
else{
_digits[i] += val.digits[i];
if(_digits[i] > 999999){
if(!_digits[i + 1])_digits[i + 1] = 1;
else _digits[i + 1] += 1;
_digits[i] -= 1000000;
}
}
}
parse();
return this;
}
public function subtract(val:Int_):Int_{
var l:int = val.len;
for(var i:int = 0; i < l; i++){
if(_digits[i] < val.digits[i]){
_digits[i + 1] -= 1;
_digits[i] += 1000000;
}
_digits[i] -= val.digits[i];
}
parse();
return this;
}
public function multiple(val:Int_):Int_{
var i:Int_ = val.clone();
while(true){
i.subtract(new Int_("1"));
if(i.len == 0)break;
this.add(this.clone());
}
return this;
}
public function divide(val:Int_):void{
}
public function residue(val:Int_):void{
}
public function clone():Int_{
return new Int_(this.toString());
}
public function toString():String{
var str:String = "";
var l:int = _len;
while(l--){
str = str.concat(String(digits[l]));
}
return str;
}
}