public static String add(String data1,String data2){ int len1 = data1.length(); int len2 = data2.length(); int len = len1>len2?len1:len2; while(len1++ < len){ data1 = "0" + data1; } while(len2++ < len){ data2 = "0" + data2; } int arr[] = new int[len]; for(int i=0;i<len;i++){ arr[i] = data1.charAt(i) - '0' + data2.charAt(i) - '0' ; } for(int i=len-1;i>0;i--){ int jinWei = arr[i]/10; arr[i] = arr[i]%10; arr[i-1] = arr[i-1] + jinWei; } StringBuffer sb = new StringBuffer(); if(arr[0]>=10){ sb.append(arr[0]/10); sb.append(arr[0]%10); }else{ sb.append(arr[0]); } for(int i=1;i<len;i++){ sb.append(arr[i]); } return sb.toString(); }
public class Test { public static void main(String[] args) { String data1 = "3435652334"; String data2 = "443585969687"; String result = add(data1,data2); System.out.println(result); }
public static String add(String str1, String str2) { int carry = 0; StringBuilder result = new StringBuilder(); for (int i = 0 ; i < str1.length() || i < str2.length(); ++i) { int v1 = intAt(i, str1); int v2 = intAt(i, str2); int sum = v1 + v2 + carry;
carry = sum / 10; result.append(sum % 10); }
return result.reverse().toString(); }
// 从后往前取数字 public static int intAt(int index, String str) { if (index < str.length()) { return Integer.parseInt(str.charAt(str.length() - index - 1) + ""); } return 0; } }
如果考虑到效率的话,不一定要1位1位地处理,可以一段一段地(不超过long的长度)处理。
public static String add(String s1, String s2) { BigDecimal bd1 = new BigDecimal(s1); BigDecimal bd2 = new BigDecimal(s2); BigDecimal result = bd1.add(bd2); return result.toString(); }
哦,不能使用BigDecimal,没看见
不太明白意思 要求的结果是什么? public static String add(String da, String de) { return da + de; }
public static String add(String data1,String data2){
int len1 = data1.length();
int len2 = data2.length();
int len = len1>len2?len1:len2;
while(len1++ < len){
data1 = "0" + data1;
}
while(len2++ < len){
data2 = "0" + data2;
}
int arr[] = new int[len];
for(int i=0;i<len;i++){
arr[i] = data1.charAt(i) - '0' + data2.charAt(i) - '0' ;
}
for(int i=len-1;i>0;i--){
int jinWei = arr[i]/10;
arr[i] = arr[i]%10;
arr[i-1] = arr[i-1] + jinWei;
}
StringBuffer sb = new StringBuffer();
if(arr[0]>=10){
sb.append(arr[0]/10);
sb.append(arr[0]%10);
}else{
sb.append(arr[0]);
}
for(int i=1;i<len;i++){
sb.append(arr[i]);
}
return sb.toString();
}
public static void main(String[] args) {
String data1 = "3435652334";
String data2 = "443585969687";
String result = add(data1,data2);
System.out.println(result);
}
public static String add(String str1, String str2) {
int carry = 0;
StringBuilder result = new StringBuilder();
for (int i = 0 ; i < str1.length() || i < str2.length(); ++i) {
int v1 = intAt(i, str1);
int v2 = intAt(i, str2);
int sum = v1 + v2 + carry;
carry = sum / 10;
result.append(sum % 10);
}
return result.reverse().toString();
}
// 从后往前取数字
public static int intAt(int index, String str) {
if (index < str.length()) {
return Integer.parseInt(str.charAt(str.length() - index - 1) + "");
}
return 0;
}
}
public static String add(String s1, String s2) {
BigDecimal bd1 = new BigDecimal(s1);
BigDecimal bd2 = new BigDecimal(s2);
BigDecimal result = bd1.add(bd2);
return result.toString();
}
要求的结果是什么?
public static String add(String da, String de) { return da + de;
}
if(carry > 0 ){
result.append(carry);
}
int v1 = intAt(i, str1);
int v2 = intAt(i, str2);
int sum = v1 + v2 + carry;
carry = sum / 10;
result.append(sum % 10);
}
if(carry!=0) {
result.append(carry);
}
return result.reverse().toString();
String a="12345678987654";
String b="987654326784";
long[] a1=new long[a.length()/9];
//因为long可以存放10^19位以上的数,控制每个数组元素小于10^9才能保证两个数组元素相乘时不溢出
long[] b1=new long[b.length()/9];通过截取字符串然后转化成long型数的方式得到下面结果
a1={678987654,12345};
b1={654326784,987};
long[] result=new long[a1.length+b1.length];
然后采用两个for循环对应位相乘,例如a1[i]*b1[k]的结果放入result[i+k]中,同时要注意保持result[i+k]的值不能超过10^9,若超过的话就向result[i*k+1]进位
{
int x=Integer.parseInt(a);
int y=Integer.parseInt(b);
return new Integer(x+y).toString();
}
public class Test { public static void main(String[] args) {
String data1 = "123456789";
String data2 = "987654321";
System.out.println(add(data1, data2));
}
public static String add(String data1, String data2) {
int length1 = data1.length();
int length2 = data2.length();
int length = Math.max(length1, length2);
int[] a1 = new int[length];
int[] a2 = new int[length];
int i;
for(i=0; i<length1 && i<length2; i++) {
a1[length-length1+i] = data1.charAt(i)-'0';
a2[length-length2+i] = data2.charAt(i)-'0';
}
while(i<length1) {
a1[length-length1+i] = data1.charAt(i)-'0';
i++;
}
while(i<length2) {
a2[length-length2+i] = data2.charAt(i)-'0';
i++;
}
int[] res = new int[length +1];
for(i=length-1; i>=0; i--) {
res[i+1] = a1[i]+a2[i];
}
for(i=res.length-1; i>0; i--) {
if(res[i]>=10) {
res[i] %= 10;
res[i-1] += 1;
}
}
StringBuilder sb = new StringBuilder();
if(res[0] != 0)
sb.append(res[0]);
for(i=1; i<res.length; i++)
sb.append(res[i]);
return sb.toString();
}
}