概述
有次面试,被人问到这个问题,简单的写了个原理,代码一时没写出来。
得空把这个给完成了,查了下,BigInteger有现成的,又一个轮子。
package info.frady;
public class BigNumber {
public static int width=1000;
/**
* 两个字符串的大数相加,最大可以到1000位
* @param a1
* @param a2
* @return
*/
public static String add(String a1,String a2){
int num1[],num2[],num3[];
num1=num2=num3=new int[width];
//将字符串数字赋值给数组
num1=toIntArray(a1);
if(num1[0]==-1){
return "输入的第一个参数不是数字,请检查";
}
num2=toIntArray(a2);
if(num2[0]==-1){
return "输入的第二个参数不是数字,请检查";
}
for(int i=0;i<width-1;i++){
int temp=0;
temp=num1[i]+num2[i]+num3[i];
num1[i]=temp % 10;//num1存结果的余数
num3[i+1]=(temp/10)%10;//num3存结果的进位
}
while(!isZero(num3)){
for(int i=0;i<width-1;i++){
int temp=0;
temp=num1[i]+num3[i];
num1[i]=temp % 10;//num1存结果的余数
num3[i+1]=(temp/10)%10;//num3存结果的进位
}
}
StringBuffer sb=new StringBuffer();
boolean flag=false;
for(int i=num1.length-1;i>=0;i--){
if(num1[i]!=0){
flag=true;
}
if(flag){
sb.append(num1[i]);
}
}
return sb.toString();
}
/**
* 字符串转化成数字,如果包含不是数字的字符,就将第一位置为-1,调用程序通过第一位的数值来判断是否出错
* @param str
* @return
*/
public static int[] toIntArray(String a1){
int num1[]=new int[width];
for(int i=1;i<=a1.length();i++){
int temp=0;
temp=Character.getNumericValue(a1.charAt(a1.length()-i));
if(temp>=0&&temp<=9){
num1[i-1]=temp;
}
else{
num1[0]=-1;
return num1;
}
}
return num1;
}
public static boolean isZero(int num[]){
boolean flag=true;
for(int i=0;i<num.length;i++){
if(num[i]>0){
return false;
}
}
return flag;
}
public static void main(String[] args) {
System.out.println(add("1m1","22"));
System.out.println(add("19","22"));
System.out.println(add("33","88"));
System.out.println(add("99","99"));
System.out.println(add("0","99"));
System.out.println(add("100","99"));
System.out.println(add("102","99"));
}
}
最后
以上就是快乐火龙果为你收集整理的很长的字符串整数求和的全部内容,希望文章能够帮你解决很长的字符串整数求和所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复