大数相乘 java
- <pre name="code" class="java">package bigMultiply;
- import java.math.BigInteger;
- /**
- * 大數相乘
- * @author root
- *
- */
- public class MyMultiply1 {
- /**
- * @param args
- */
- public static void main(String[] args) {
- String str1 = "23456789009877666555544444";
- String str2 = "346587436598437594375943875943875";
- String result = multiply(str1, str2);
- String result1 = multiply1(str1, str2);
- System.out.println("乘数:"+str1);
- System.out.println("乘数:"+str2);
- System.out.println("结果:"+result);
- System.out.println("结果:"+result1);
- }
- private static String multiply1(String str1, String str2){
- BigInteger bigInteger1=new BigInteger(str1);
- BigInteger bigInteger2=new BigInteger(str2);
- //multiplay
- bigInteger1=bigInteger1.multiply(bigInteger2);
- return bigInteger1.toString();
- }
- public static String multiply(String str1, String str2) {
- //判断符号
- char flag1;
- char flag2;
- char flag;
- if(str1.charAt(0)=='-'){
- flag1 = '-';
- str1 = str1.substring(1);
- }else if(str1.charAt(0)=='+'){
- flag1 = '+';
- str1 = str1.substring(1);
- }else{
- flag1 = '+';
- }
- if(str2.charAt(0)=='-'){
- flag2 = '-';
- str2 = str2.substring(1);
- }else if(str2.charAt(0)=='+'){
- flag2 = '+';
- str2 = str2.substring(1);
- }else{
- flag2 = '+';
- }
- if(flag1==flag2){
- flag = '+';
- }else{
- flag = '-';
- }
- // 两数乘积位数不会超过乘数位数和+ 3位
- char [] s1 = new StringBuffer(str1).reverse().toString().toCharArray();
- char [] s2 = new StringBuffer(str2).reverse().toString().toCharArray();
- int [] result = new int[str1.length()+str2.length()+3];
- //逐位相乘
- for(int i=0; i<s1.length; i++){
- for(int j=0; j<s2.length; j++){
- result[i+j]+= (s1[i]-'0')*(s2[j]-'0');
- }
- }
- //进位
- for(int i=0; i<result.length-1; i++){
- result[i+1]+=result[i]/10;
- result[i] = result[i]%10;
- }
- //输出
- boolean start = false;
- StringBuilder sb = new StringBuilder();
- sb.append(flag);
- for(int i=result.length-1; i>=0; i--){
- if(result[i]!=0){
- start=true;
- }
- if(start){
- sb.append(result[i]);
- }
- }
- return sb.toString();
- }
- }
大数相乘 java的更多相关文章
- 华为上机测试题(大数相乘-java)
PS:这个不是自己写的,测试OK,供参考. /** * 大数相乘 */ public class BigData { public static void main(String[] args) { ...
- 两个大数相乘-Java
两个字符串表示两个非常大的数,请设计算法计算这两个大数的乘积,结果用字符串表示.例如S1="7832974972840919321747983209327",S2="19 ...
- Multiply Strings 大数相乘 java
先贴上代码 public String multiply(String num1, String num2) { String str = ""; StringBuffer sb ...
- POJ 2389 Bull Math(水~Java -大数相乘)
题目链接:http://poj.org/problem?id=2389 题目大意: 大数相乘. 解题思路: java BigInteger类解决 o.0 AC Code: import java.ma ...
- java版大数相乘
在搞ACM的时候遇到大数相乘的问题,在网上找了一下,看到了一个c++版本的 http://blog.csdn.net/jianzhibeihang/article/details/4948267 用j ...
- Java 大数相乘、大数相加、大数相减
思路来源:: https://blog.csdn.net/lichong_87/article/details/6860329 /** * @date 2018/6/22 * @description ...
- 大数相乘算法C++版
#include <iostream> #include <cstring> using namespace std; #define null 0 #define MAXN ...
- Linux C/C++ 编程练手 --- 大数相加和大数相乘
最近写了一个大数相乘和相加的程序,结果看起来是对的.不过期间的效率可能不是最好的,有些地方也是临时为了解决问题而直接写出来的. 可以大概说一下相乘和相加的解决思路(当然,大数操作基本就是两个字符串的操 ...
- Karatsuba乘法--实现大数相乘
Karatsuba乘法 Karatsuba乘法是一种快速乘法.此算法在1960年由Anatolii Alexeevitch Karatsuba 提出,并于1962年得以发表.此算法主要用于两个大数相乘 ...
随机推荐
- JavaWeb【一、简介】
原计划上周完成的内容,硬是过了一个清明拖到了这周,工作上还有很多东西没做...明天抓紧看把,争取这周末搞定 内容简介:(学习完后会重新梳理调整) 1.JavaWeb[一.简介] 2.JavaWeb[二 ...
- 5、vim编辑器
1.什么是VIM? 理解为windows下面的文本编辑器,比如记事本,比如word文档 2.为什么要学? 因为在后面我们配置的服务,都需要人为修改配置,以便让程序按照我们修改后的指示运行. 1.修改配 ...
- PHP-MYSQL中文乱码问题.
从MySQL 4.1开始引入多语言的支持,但是用PHP插入的中文会出现乱码.无论用什么编码也不行. 解决这个问题其实很简单. 1.在建表的时候设置编码类型为gb2312_chinese_ci. 2.在 ...
- qt libusb
https://github.com/Kakadu/Qt_libusb https://github.com/mcvsama/libusbcc/tree/master/src/libusbcc htt ...
- unbutu apt-get update失败及解决办法
今天在用apt-get update更新时一直失败,报的错误为”Failed to fetch 404 Not Found”,因为我的镜像改为了mirrors.aliyun.com 我试着ping了一 ...
- springboot-rabbitmq的使用
一.RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿 ...
- UVa540 Team Queue(队列queue)
队列 STL队列定义在头文件<queue>中, 用“ queue<int>s ” 方式定义, 用push()和pop()进行元素的入队和出队操作, front()取队首元素(但 ...
- loj2424 「NOIP2015」子串[字符串DP]
给定字符串 A,B,要求从 A 中取出互不重叠的 k 个非空子串,按照出现顺序拼起来后等于 B.求方案数.n ≤ 1000,m ≤ 200. 主要是状态的转移.先设计出$f_{i,j,k}$表长度$B ...
- vue项目中,点击按钮复制其内容
<el-table-column label="推广链接" align="center"> <template slot-scope=&quo ...
- Navicat导出表结构
SQL Server导出表结构 Oracle导出表结构