首页 > 编程语言 >上机题目(中级)- 两个超级大的整数相加相减 (Java)

上机题目(中级)- 两个超级大的整数相加相减 (Java)

时间:2022-11-11 14:31:47浏览次数:40  
标签:Java 相减 上机 int len jiewei temp sb String


代码如下:

public class AddSub {
public static void main(String[] args) {

String a="4632864832684683568465765487657665765236465244";
String b="47";
int []pa=stringToInts(a);
int []pb=stringToInts(b);
String ans_add=add(pa, pb);
String ans_sub=sub(pb,pa);
System.out.println("相加结果是:"+ans_add);
System.out.println("相减结果是:"+ans_sub);
}
/**
* 将String型转换成int数组
* @param s
* @return
*/
public static int[] stringToInts(String s){
int[] n = new int[s.length()];
for(int i = 0;i<s.length();i++){
n[i] = Integer.parseInt(s.substring(i,i+1));
}
return n;
}

public static String add(int []a,int []b){
StringBuffer sb=new StringBuffer();
int a_len= a.length-1;
int b_len=b.length-1;
int jinwei=0;//进位
while(a_len>=0||b_len>=0){
int temp=0;
if(a_len>=0&&b_len>=0){
temp=a[a_len]+b[b_len]+jinwei;
}else if(a_len>=0){
temp=a[a_len]+jinwei;
}else if(b_len>=0){
temp=b[b_len]+jinwei;
}
sb.append(temp%10+"");
jinwei=temp/10;
a_len--;b_len--;
}
return getNum(sb.reverse());
}

public static String sub(int []a,int []b){
StringBuffer sb=new StringBuffer();
boolean flag=false;//判断a是不是比b小
if(a.length<b.length){
int c[]=a;
a=b;b=c;//交换一下
flag=true;
}
int a_len= a.length-1;
int b_len=b.length-1;
int jiewei=0;//借位
while(a_len>=0||b_len>=0){
int temp=0;
if(a_len>=0&&b_len>=0){
if((a[a_len]-jiewei)<b[b_len]){
temp=a[a_len]+10-b[b_len]-jiewei;
jiewei=1;
}else{
temp=a[a_len]-b[b_len]-jiewei;
}
}else if(a_len>=0){
temp=a[a_len]-jiewei;
jiewei=0;
}
sb.append(temp+"");

a_len--;b_len--;
}
if(flag){
return getNum(sb.append("-").reverse());
}
return getNum(sb.reverse());
}
//去掉最前面的0
public static String getNum(StringBuffer sb){
while(sb.length() > 1 && sb.charAt(0) == '0') {
sb.deleteCharAt(0);
}
return sb.toString();
}

}


运行实例如下:

上机题目(中级)- 两个超级大的整数相加相减 (Java)_数组

标签:Java,相减,上机,int,len,jiewei,temp,sb,String
From: https://blog.51cto.com/u_15866446/5844864

相关文章

  • 上机题目(初级)- 下雪球(Java)
    上一节实现了滚雪球的代码,这一节实现下雪球的代码,简单考虑,制造一个循环,产生30个随机数,代码如下:importjava.awt.Color;importjava.awt.Frame;importjava.awt.Graphics;imp......
  • 如何通过Java 在 Word 中更改字体颜色
    在Word文档中使用不同的字体颜色既可以丰富文档外观,也能突出强调某些重点部分。当Word文档包含大量内容时,可以使用FreeSpire.DocforJava轻松更改Word文档中的字体颜色。......
  • java逻辑运算中 | | 和 | 的区别
    本文主要阐明逻辑运算中||(短路或)和|(逻辑或)的异同||和|的相同之处:只有二者都是假时,结果才为假,否则结果为true。||和|的不同之处在于:a||b:如果a为true......
  • java逻辑运算&&与&的区别
    本文主要阐述&&(短路与)和&(逻辑与)的运算异同:a&&b和a&b:共同之处是只有a和b同时为真时,结果才为真,否则为假不同点在于a&&b(短路与)若a为假时,则无需判断b,直接得出结......
  • [JavaScript-10]this指向
    1.默认绑定//全局环境指向windowconsole.log(this);//函数独立调用,函数内部this指向windowfunctionfn(){console.log(this);}fn();//函数当做对象方法......
  • Java--static 关键字小研究
    一、用static修饰的静态代码块:classDemo{{System.out.println("1、构造块。");}static{System.out.println("0、静态代码块。");}publicDemo(){Sys......
  • 蛋疼的Caused by: java.lang.ClassNotFoundException
    开发中最长遇到的错误提示,遇到这种错误提示,一般可能有:1.忘记在AndroidManifest中配置,这个很好解决,在里面配置一下就行了。2.更常见的问题是在引入外包时出现这个问题,怎么解......
  • Android实战--小DEMO(JAVA关键字学习)一
    学习技术最好的方式就是实战,看书看不到的东西太多了,实际操作时会碰到各种书本里提不到的问题,解决这些问题会迅速提升你的能力,你是一个solider,最好成长的方式就是实战。下面......
  • 【Java】guava(六)函数式编程与惰性求值
    举个例子,比如我们的web服务器应用,我们可能会写一个类似拦截器一样的模块来提前把一些公共参数抽取出来,比如像token,userid,ip地址等等这样的信息,放入一个类似ThreadLocal的对......
  • 【Java】okHttp3 简单使用
    之前用的RestTemplate,发现一个multipart的http请求始终发不成功,后面就试了下okHttp,发现真的好用,api太清爽了,记录一下使用:packagecom.liyao;importjava.io.FileInputStream......