当前位置: 首页 > news >正文

做网站的公司地址搜索排行榜

做网站的公司地址,搜索排行榜,有哪些做共享充电宝的网站,企业网站开发怎么样上一篇写的“[大整数乘法]分治算法的时间复杂度研究”,这一篇是基于上一篇思想的代码实现,以下是该文章的连接: http://www.cnblogs.com/McQueen1987/p/3348426.html 代码主要实现大整数乘法,过程中也涉及到[大整数加法] 和 [大整…

上一篇写的“[大整数乘法]分治算法的时间复杂度研究”,这一篇是基于上一篇思想的代码实现,以下是该文章的连接:

http://www.cnblogs.com/McQueen1987/p/3348426.html

代码主要实现大整数乘法,过程中也涉及到[大整数加法] 和 [大整数减法] 的计算,代码如下:

 

类1

————————————————————————————————————————————————————————————

package bigIntNum;

public class NumDividEqual {public char[] A;public char[] B;int n;/*** 将数组均分为两份,分别存入数组A和数组B中;* @param input*/public NumDividEqual(char[] input){n = input.length/2;A = new char[n];B = new char[n];for(int i = 0; i<n;i++){A[i] = input[i];}for(int i = 0; i<n;i++){B[i] = input[i + n];} }public static void main(String[] args) {// TODO Auto-generated method stub} }

  

类2

————————————————————————————————————————————————————————————

package bigIntNum;import java.util.Arrays;public class bigIntMult {/*** 将字符数组倒序排列* @param input* @return*/public char[] reverse(char[] input) {char[] output = new char[input.length];for (int i = 0; i < input.length; i++) {output[i] = input[input.length - 1 - i];}return output;}/*** 将大整数平均分成两部分* @param input* @return*/public NumDividEqual partition(char[] input) {return new NumDividEqual(input);}/*** 求两数组中较大数组的长度,如果其长度为奇数则+1变偶* @param num1* @param num2* @return*/public int calLength(char[] num1, char[] num2) {int len = num1.length > num2.length ? num1.length : num2.length;if (len == 1)return 1;len += len & 1;return len;}/*** 除去数字前面多余的0* @param input* @return*/public static char[] trimPrefix(char[] input) {char[] ret = null;for (int i = 0; i < input.length; i++) {if (ret == null && input[i] == '0')continue;else {if (ret == null) {ret = new char[input.length - i];//出去数字前面多余的0
                }ret[i - (input.length - ret.length)] = input[i];}}if (ret == null)return new char[] { '0' };return ret;}/*** 数组如果长度不足n,则在数组前面补0,使长度为n。* @param input 输入数组要求数字的最高位存放在数组下标最小位置* @param n * @return*/public static char[] format(char[] input, int n) {//if (input.length >= n) {return input;}char[] ret = new char[n];for (int i = 0; i < n - input.length; i++) {ret[i] = '0';}for (int i = 0; i < input.length; i++) {ret[n - input.length + i] = input[i];}return ret;}/*** 大整数尾部补0。相当于移位,扩大倍数* @param input* @param n* @return*/public char[] addTail(char[] input, int n) {//
        char[] ret = new char[input.length + n];for (int i = 0; i < input.length; i++) {ret[i] = input[i];}for (int i = input.length; i < ret.length; i++) {ret[i] = '0';}return ret;}/*** 大整数加法* @param num1* @param num2* @return*/public char[] add(char[] num1, char[] num2) {int len = num2.length > num1.length ? num2.length : num1.length;int carry = 0;//进位标识num1 = format(num1, len);num2 = format(num2, len);char[] ret = new char[len + 1];for (int i = len - 1; i >= 0; i--) {int tmp = num1[i] + num2[i] - 96;tmp += carry;if (tmp >= 10) {carry = 1;tmp = tmp - 10;} else {carry = 0;}ret[len - i - 1] = (char) (tmp + 48);}ret[len] = (char) (carry + 48);//最后一次,最高位的进位return trimPrefix(reverse(ret));}/*** 大整数减法:* @param num1 被减数,大整数乘法中只有一个减法(A+B)(C+D)-(AC+BD)=AC+BC>0,因此參數num1>num2且都为正* @param num2 减数* @return*/public static char[] sub(char[] num1, char[] num2) {int lenMax = num1.length > num2.length ? num1.length : num2.length;char[] newNum1 = Arrays.copyOf(format(num1, lenMax), lenMax);//字符串前面补0,使两串长度相同char[] newNum2 = Arrays.copyOf(format(num2, lenMax), lenMax);for(int i=0;i<lenMax;i++){//when num1-num2<0 returnif((newNum1[i]=='0' && newNum1[i]=='0') || newNum1[i] == newNum2[i]){//newNum1 is bigger;  continue;}else if(newNum1[i] < newNum2[i]){//不滿足參數num1>num2;System.out.println("The Parameter in sub(A,B).A MUST Bigger Than B!");System.exit(0);}else break;}for(int i=lenMax-1;i>=0;i--){if(newNum1[i] < newNum2[i]){//result < 0newNum1[i] = (char) (newNum1[i] + '0' + 10 - newNum2[i]);newNum1[i-1] = (char) (newNum1[i-1] - 1);}else{newNum1[i] = (char) (newNum1[i] + '0' - newNum2[i]);}}return trimPrefix(newNum1);}      /*** 大整数乘法* @param num1* @param num2* @return*/public char[] mult(char[] num1, char[] num2) {char[] A, B, C, D, AC, BD, AjB, CjD, ACjBD, AjBcCjD,  SUM;int N = calLength(num1, num2);//求两数组中较大数组的长度,如果长度为奇数则+1变偶,方便二分成两部分num1 = format(num1, N);//数组高位存整数的高位数;数字前面补0,使长度为n;num2 = format(num2, N);if (num1.length > 1) {NumDividEqual nu1 = partition(num1);//将大整数平均分成两部分NumDividEqual nu2 = partition(num2);A = nu1.A;B = nu1.B;C = nu2.A;D = nu2.B; AC = mult(A, C);//分治求大整数乘法BD = mult(B, D);AjB = add(A,B);CjD = add(C,D);ACjBD = add(AC,BD);AjBcCjD = mult(AjB, CjD);char[] tmp1 = addTail(sub(AjBcCjD, ACjBD), N / 2);//尾部补0,相当于移位char[] tmp2 = add(addTail(AC, N), BD);SUM = add(tmp1, tmp2);char[] test = trimPrefix(SUM);//除去结果前面多余的0return test;} else {Integer ret = (num1[0] - 48) * (num2[0] - 48);return ret.toString().toCharArray();}}public static void main(String[] args) {String st1 = "168746315641347979798";String st2 = "164681654767446887797451316158";char[] a = st1.toCharArray();char[] b = st2.toCharArray();bigIntMult bg = new bigIntMult();char[] ret = bg.mult(a, b);System.out.println(ret);}
}

 

 

代码优化:

1.可以写个hash表,存储一些常见的乘法,从而避免每次都重复计算。比如9999x9999999,里面有重复的9x9计算,可以考虑hash表存储这些计算的结果,用到时直接查询结果,从而避免重复计算。

 

声明:代码是本人脑力劳动结果,请尊重他人劳动。转载注明出处!

 

 

转载于:https://www.cnblogs.com/McQueen1987/p/3401979.html

http://www.lbrq.cn/news/2574775.html

相关文章:

  • 网站商城与网站区别搜索引擎优化教材答案
  • 合肥网站建设电话咨询网站生成
  • 朝阳市城乡建设委员会网站和福州短视频seo获客
  • 某网站建设策划方案快速网站推广公司
  • 微信上优惠券的网站怎么做的如何建立网站平台的步骤
  • 做简单网站后端需要学什么国内军事新闻最新消息
  • 贵阳做网站 优帮云宁波seo推广优化哪家强
  • 网站做视频播放占用cpu吗网络营销特点
  • 有哪几种语言做的网站培训心得体会1000字通用
  • 网站建设入门seo自然排名
  • 江宁网站建设价位安全优化大师
  • 网站如何测试有无未做链接的文件福州seo网址优化公司
  • 微信点赞网站怎么做新闻联播今日新闻
  • 苏州公司网站建设价格长春网站建设设计
  • 高端网站建设公司有哪些建站网站关键词优化
  • 东莞做商城网站建设国内搜索引擎排名
  • 开票 网站建设东营seo
  • 网站建设 cms如何做google推广
  • wordpress内核权限seo优化服务是什么意思
  • 唐山市政建设总公司网站小红书广告投放平台
  • 深圳p2p网站建设全国疫情最新消息
  • 潍坊百度网站建设昆明seo网站建设
  • 学校网站 asp今日重庆重要消息
  • 网站建设合同开发票类别名称佛山seo培训
  • 机电建设工程施工网站网站页面优化方法
  • 做公司网站的模板个人引流推广怎么做
  • 做网站的视频推广竞价托管费用
  • 电子商务网站开发遇到的问题厦门seo网络优化公司
  • 网站建设图片手机腾讯云服务器
  • 德州 网站建设打广告去哪个平台
  • React中的Hooks
  • 1.8 axios详解
  • Vim编辑器详解:从入门到高效使用
  • SpringBoot与TurboGears2跨栈、整合AI服务、智能客服路由系统整合实战
  • python匿名函数lambda
  • 使用 BERT 的 NSP 实现语义感知切片 —— 提升 RAG 系统的检索质量