`

java大整数相加及相乘

阅读更多

import java.io.BufferedInputStream;
import java.util.Scanner;
public class bigdec {
 public static void main(String[] args) {
  Scanner cin=new Scanner(new BufferedInputStream(System.in));
  String a,b;
  a=cin.next();
  b=cin.next();
  System.out.println(bigMul(a, b));
  System.out.println(bigAdd(a, b));
  //System.out.println(bigMu(a, 0));
 }
 public static String bigAdd(String a,String b){
  StringBuilder c = new StringBuilder();
  String d = "";
  int e;
  int ad=0;
  int al=a.length();
  int bl=b.length();
  while (al!=0&&bl!=0) { 
   e=(int)a.charAt(al-1)-48+(int)b.charAt(bl-1)-48+ad;
   if(e>=10) {e=e%10;ad=1;}
   else ad=0;
   c.append(e);
   al--;
   bl--;
  }
  if(al>bl){
   for (int i = al; i >0; i--) {
    e=(int)a.charAt(i-1)-48+ad;
    if(e>=10) {e=e%10;ad=1;}
    else ad=0;
    c.append(e); 
   }
   if(ad==1) c.append(ad);
  }
  else if(al<bl){
   for (int i = bl; i >0; i--) {
    e=(int)b.charAt(i-1)-48+ad;
    if(e>=10) {e=e%10;ad=1;}
    else ad=0;
    c.append(e); 
   }
   if(ad==1) c.append(ad);
  }
  else if (al==bl) {
   if(ad==1) c.append(ad);
  }
  for (int i = c.length()-1; i >=0; i--) {
   d+=c.charAt(i);
  }
  return d;
 }
 public static String bigMu(String a,int b){
  StringBuilder c = new StringBuilder();
  String d="";
  int e;
  int ad=0;
  int len=a.length();
  for (int i = len-1; i >=0; i--) {
   e=((int)a.charAt(i)-48)*b+ad;
   ad=e/10;
   e=e%10;
   c.append(e);
  }
  if(ad!=0) c.append(ad);
  for (int i = c.length()-1; i >=0; i--) {
   d+=c.charAt(i);
  }
  return d; 
 }
 public static String bigMul(String a,String b){
  int al=a.length();
  int bl=b.length();
  String c = "",d;
  if(al>=bl){
   c=bigMu(a, (int)b.charAt(bl-1)-48);
   //System.out.println(c);
   for (int i = bl-2; i >=0; i--) {
    d=bigMu(a,(int)b.charAt(i)-48);
    for (int j = 0; j <bl-i-1; j++) {
     d+=0;
     //System.out.println(d);
    }  
    c=bigAdd(c, d); 
    //System.out.println(c);
   }
  }
  if(al<bl){
   c=bigMu(b, (int)a.charAt(al-1)-48);
     for (int i = al-2; i >=0; i--) {
      d=bigMu(b,(int)a.charAt(i)-48);
      for (int j = 0; j <al-i-1; j++) {
       d+=0;
       //System.out.println(d);
      }  
      c=bigAdd(c, d); 
      //System.out.println(c);
     }
  }
  return c;
 }
}

分享到:
评论

相关推荐

    大整数相乘算法 分治法

    大整数相乘算法是计算机科学中用于处理超出标准数据类型范围的大整数乘法问题的一种方法。在大多数编程语言中,如C++,整数类型(如`unsigned long`)都有其最大值限制,一旦超过这个限制,就无法正确表示大整数的...

    BigNum大整数的运算

    在实际编程中,有很多现成的大整数库可以使用,例如Java的BigInteger类,Python的内置decimal模块,C++的GMP库等。这些库提供了丰富的接口,可以方便地进行大整数的运算,并且已经优化了性能,避免了重复造轮子的...

    相乘求和的计算器

    这个计算器的独特之处在于它不仅支持基本的加法和乘法,而且特别设计了一个功能,允许用户输入一系列的整数或浮点数,然后进行逐对相乘,最后将所有乘积相加。这在处理涉及多个数值乘积累加的计算场景时非常实用,...

    任意正整数都能拆成若干唯一的2的幂指数之和

    任意正整数都能拆成若干唯一的2的幂指数之和,php版本和js版本都有。

    正大整数 (+-×)

    例如,两个正大整数相加时,可能需要进行高位的进位,相乘时可能涉及复杂的长乘算法。 4. **性能考虑**: 虽然正大整数可以处理非常大的数值,但它们的计算速度相对较慢,因为涉及到更多的内存操作和更复杂的逻辑...

    java练习_大数运算_BigInteger.pdf

    BigInteger类的出现解决了 Java 中的整数溢出问题,使得Java程序可以处理非常大的整数。 BigInteger类的方法 BigInteger类提供了多种方法来进行大整数的运算,以下是一些常用的方法: * `add(BigInteger val)`: ...

    BigInteger_demo.zip

    标题中的"BigInteger_demo.zip"表明这是一个关于Java的大整数处理示例程序的压缩包,其中可能包含一个名为"BigInteger.exe"的应用程序。这个程序很可能是用Java编程语言编写的,利用了Java的BigInteger类来处理大...

    Java的算数方法.docx

    4. 除法(/):当两个操作数都是整数时,执行整数除法,如`num1 / num2`,结果为整数部分。如果有一个操作数是浮点数,则执行浮点除法,如`num1.0 / num2`。 5. 取余数(%):返回除法后的余数,例如`num1 % num2`。...

    数据课程设计_长整数

    在许多编程语言中,如Python、Java和C++,都有内置的长整数支持。 数据课程设计中的长整数加减部分是基础的算法实现,它是理解计算机如何处理大规模数值运算的关键。在这个项目中,我们主要关注的是如何高效且正确...

    长整型四则运算 长整型

    当两个大整数相加或相乘的结果超出了长整型的最大值时,就会发生溢出。在某些编程语言中,溢出可能会导致未定义的行为,因此在处理大整数时需要谨慎。 2. **精度损失**:在进行除法运算时,尤其是浮点数与长整型...

    计算器源文件_java_数学_

    1. **加法(Addition)**:`add(int num1, int num2)` 方法将两个正整数相加。这可以通过使用 `+` 运算符直接完成,例如 `return num1 + num2;`。 2. **减法(Subtraction)**:`subtract(int num1, int num2)` ...

    java有理分数运算

    Java 提供了整数和浮点数的数据类型,但是没有提供有理数的类型。因此,我们需要定义一个 Rational 类来表示有理分数。 Rational 类的设计 Rational 类是一个特殊的数值类型,表示有理分数。它继承自 Number 类,...

    算法Java经典.doc

    质因数分解是将一个正整数分解为若干个质数相乘的形式。在Java中,可以通过一个循环结构遍历从2到目标数的一半的所有整数,如果目标数能被当前的整数整除,则说明这是一个因数。接着,将目标数除以这个因数,再对...

    Java练习题,实用于Java大部分人群

    - **知识点**:将一个正整数分解成若干个质数相乘的形式。 - **实现方法**: - 从小到大依次用2、3、5等质数去除目标数。 - 当目标数不能被当前质数整除时,增加质数的值继续尝试。 - 直到目标数变为1为止,即可...

    超额发票单据按照限额拆分java

    为了符合财务规定及审计要求,这类单据需要被拆分成若干个限额内的单据进行处理。 #### 二、Java实现超额发票单据拆分的技术要点 1. **参数定义与初始化**:首先明确拆分方法所需参数,并对其进行初始化。 - `Map...

    java编程练习题

    - **定义**:将一个正整数表示为若干个质数相乘的形式。 - **实现思路**: - 从小到大遍历可能的质数k。 - 如果k能够整除n,则k是n的一个质因数。 - 更新n为n/k,继续分解。 - 重复以上步骤直到n等于1。 #### ...

    JAVA运算符[借鉴].pdf

    - **整数与浮点数**:当整数与浮点数相加、相减、相乘时,结果是浮点数。整数除以浮点数会自动转换为浮点除法。 - **浮点数与浮点数**:浮点数之间的运算始终产生浮点数结果,类型取决于参与运算的浮点数精度(单...

Global site tag (gtag.js) - Google Analytics