flash on 2010-10-7

by enecre
♥0 | Line 102 | Modified 2010-10-07 13:41:33 | MIT License
play

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;
    }

}