.net中大数处理赏罚的一些算法头脑
? 在 .NET 开拓中,偶然会由于处理赏罚一些边沿学科的常识内容,如统计,金融,天文等计较,是加密解密算法 城市涉及到大数的运算,就是.net中最大数值范例储存了城市溢出的数,我的一个设法是计较时用数值范例,储 存(暂且)和输出时是字符串 那么储存时就必要BOX[n] n个数组来暂且储存一个计较中的小步调功效,'如一下例子 ====================算法领略图=======================??????????????????????? '97*97*97*97*97???????????????????? = 8587340257???????????????????? box(1) = 587340257?? box(2)=8 '97*97*97*97*97*97?????????????? = 832972004929??????????????? box(1) = 972004929?? box(2)=832 '97*97*97*97*97*97*97???????? = 80798284478113???????????? box(1) = 284478113?? box(2)=80798 '97*97*97*97*97*97*97*97 = 7837433594376961???????? box(1) = 594376961?? box(2)=7837433?? '97^ 9?????????????????????????????????? = 760231058654565217???? box(1) = 654565217?? box(2)=760231058 '97^ 10???????????????????????? = 73742412689492826049?? box(1) = 492826049?? box(2)=742412689 box(3)=73 ???? ……????????????????????????????????????????????????? ……?????????????????????????????????????? ……???????????????????? …… 留意box 下表越大对应的数越高位在,在运用上面的算法时要记着 ①先界说一个BOX的符号为几位,如上面是9位(按照必要和现实环境),②因为计较风俗,许多人会从底位算起时{box(0 -> n)} 要先算box(n+1)位的数,在把box(n) 发生的进位数(如第一条计较box(1)向box(2)=0发生进位数8 box(2)+进位数 = 8 )举办处理赏罚,如以上时加法处理赏罚 ③ 最好从高位算起,你将省去许多贫困,box个数未知,不要紧,用动态数组,满了时(最高下标box发生的进位数)再添一个 尚有取模运算时,假如模数不大,也可以回收以上头脑分段求模,再链接box得暂且功效,从头分派box(必然要从高位起从头截断)如被模数123456789123456789 设八位一个box?? box(1)=89 box(2)=91234567 box(3)=12345678各box别离取模再连系(传统是123456789123456789 ÷ 333=370741108478849 模是72) 那么从头分派的盒子应该是box(1) =478849 box(2) =370741180 而不能是box(1) =370741180 box(2) = 478849 为什么? ∵从高位开始取模,box(n) 在被取模一次后假如稳固,再次取模功效没变是box(n) = box(n) 措施将进入死轮回 ???? 其它一种涉及大数运算的环境式是 对A的n 次方后取模 (A ^n mod V ) 假如mod数不大可以(是n个A后竣事)((A mod V)* A mod V) * A mod V …… 此算法不必然要用递归实现,简朴的轮回即可,最多两层嵌套轮回 ??? 最后忠告 :对一个大数举办加减乘除时万万别等闲的举办对被(加/减/乘/除)数因式解析,这种算法服从会很底 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |