概述
自己用java 实现了大字符串整数的加减乘除和求余运算,
加减法的算法是模拟手工笔算的计算过程,
除法就是从最高位不停的减操作,
乘法的算法 :遍历一个数的各个位数以及他所在位置,另一个数根据这个数的位置末位添n个0,然后累加次数为这个位置数的数值
原创代码如下:
public class Demo6 {
public static void main(String[]args){
System.out.println(add("-989","989"));
System.out.println(sub("890","-235"));
System.out.println(divide("-21","22"));
System.out.println(mtp("-123","4567"));
System.out.println(remainder("22","21"));
}
public static String add(String s1,String s2){
StringBuffer res=new StringBuffer();
if(s1.contains("-")&&s2.contains("-")){
res.append("-");
s1=s1.replace("-", "");
s2=s2.replace("-", "");
}else if((!s1.contains("-")&&s2.contains("-"))){
return sub(s1,s2.replace("-", ""));
}else if((s1.contains("-")&&!s2.contains("-"))){
return sub(s2,s1.replace("-", ""));
}
int len =Math.abs(s1.length()-s2.length());
if(s1.length()>s2.length()){
s2=castSame(s2,len);
}else{
s1=castSame(s1,len);
}
int n=0;
for(int i=s1.length()-1;i>=0;i--){
int temp = (s1.charAt(i)-‘0‘+s2.charAt(i)-‘0‘+n);
if(i==0){
res.append(temp%10).append(temp/10==0?"":temp/10);
}else{
res.append(temp%10);
n=temp/10;
}
}
return kickZero(String.valueOf(res.reverse()));
}
public static String sub(String s1,String s2){
boolean flag = false;
StringBuffer res=new StringBuffer();
if(s1.contains("-")&&s2.contains("-")){
return sub(s2.replace("-", ""),s1.replace("-", ""));
}else if((!s1.contains("-")&&s2.contains("-"))){
return add(s1,s2.replace("-", ""));
}else if((s1.contains("-")&&!s2.contains("-"))){
return "-"+add(s2,s1.replace("-", ""));
}
if(!isGreater(s1,s2)){
flag = true;
String temp =s1;
s1=s2;
s2=temp;
}
s2 = castSame( s2,s1.length()-s2.length());
int n=0;
for(int i=s1.length()-1;i>=0;i--){
Integer temp = s1.charAt(i)-‘0‘-s2.charAt(i)+‘0‘-n;
temp = i==0?(temp==0?null:temp):temp;
res.append(temp==null?"":temp>=0?temp:temp+10);
n=temp==null?0:temp<0?1:0;
}
return kickZero(flag?String.valueOf(res.append("-").reverse()):String.valueOf(res.reverse()));
}
public static String divide(String s1,String s2){
StringBuffer res = new StringBuffer();
int c=0;
if(s1.contains("-")){
s1=s1.replace("-", "");
c++;
}
if(s2.contains("-")){
s2=s2.replace("-", "");
c++;
}
if(c==1)
res.append("-");
if("0".equals(s2)){
return "ERROR";
}
if(!isGreater(s1,s2)){
return "0";
}
int n=s2.length();
String temp=s1.substring(0,n);
while(true){
int count=0;
while(sub(temp,s2).contains("-")){
temp +=s1.charAt(n);
n++;
}
while(true){
count++;
temp=sub(temp,s2);
if(sub(temp,s2).contains("-")){
break;
}
}
res.append(count);
if(n>=s1.length()){
return String.valueOf(res);
}
}
}
public static String mtp(String s1,String s2){
String res = "";
int c=0;
if(s1.contains("-")){
s1=s1.replace("-", "");
c++;
}
if(s2.contains("-")){
s2=s2.replace("-", "");
c++;
}
if(!isGreater(s1,s2)){
String t =s1;
s1=s2;
s2=t;
}
String temp = s1;
for(int i=s2.length()-1;i>=0;i--){
for(int j=0;j
res= add(res,temp);
}
temp=String.valueOf(new StringBuffer(temp).append("0"));
}
return c==1?"-"+res:res;
}
public static String remainder(String s1,String s2){
if("0".equals(s2)){
return "ERROR";
}
if(!isGreater(s1,s2)){
return s1;
}
StringBuffer res = new StringBuffer();
int n=s2.length();
String temp=s1.substring(0,n);
while(true){
int count=0;
System.out.println("n:"+n);
while(sub(temp,s2).contains("-")){
temp +=s1.charAt(n);
n++;
}
while(true){
count++;
temp=sub(temp,s2);
if(sub(temp,s2).contains("-")){
break;
}
}
res.append(count);
if(n>=s1.length()){
return temp;
}
}
}
public static boolean isGreater(String s1,String s2){//890 235
if(s1.length()>s2.length()){
return true;
}else if(s1.length()
return false;
}else if(s1.length()==s2.length()){
int i=0;
while(i
if(s1.charAt(i)
return false;
}else if(s1.charAt(i)>s2.charAt(i)){
return true;
}
i++;
}
}
return true;
}
public static String castSame(String s,int len){
StringBuffer sb =new StringBuffer();
for(int i=0;i
sb.append("0");
}
s=String.valueOf(sb.append(s));
return s;
}
public static String kickZero(String s){
int i=0;
while(s.length()>1){
if(‘0‘==s.charAt(0)){
s=s.substring(1);
}else{
break;
}
}
return s;
}
}
我比较懒,没加注释,如有不明白欢迎提问,方法比较笨,见笑了!
关于大整数的加减乘除求余运算 java
时间: 08-05
最后
以上就是俏皮纸飞机为你收集整理的java大整数的加减乘除_关于大整数的加减乘除求余运算 java的全部内容,希望文章能够帮你解决java大整数的加减乘除_关于大整数的加减乘除求余运算 java所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复