地点:电子科大
时间:9月14日13:30-15:30
题目:标准输入两段小于256位的数字字符串计算相加结果
输出两段的和。
import java.util.Scanner;
class AddLong {
public static void main(String args[]) {
Scanner sac = new Scanner(System.in);
while (sac.hasNext()) {
String str1 = sac.next();
String str2 = sac.next();
System.out.println(add(str1, str2));
}
}
public static String add(String str1, String str2) {
int j = 0;
StringBuffer sb1 = new StringBuffer(str1);
sb1 = sb1.reverse();
StringBuffer sb2 = new StringBuffer(str2);
sb2 = sb2.reverse();
StringBuffer sb = new StringBuffer();
int length = (sb1.length() > sb2.length() ? sb2.length() : sb1.length());
for (int i = 0; i < length; i++) {
int temp = Integer.valueOf(sb1.substring(i, i + 1))
+ Integer.valueOf(sb2.substring(i, i + 1)) + j;
int m = temp % 10;
j = temp / 10;
sb.append(m);
}
String s = (sb1.length() > sb2.length() ? sb1.substring(sb2.length())
: sb2.substring(sb1.length()));
int as = Integer.valueOf(s.substring(0, 1)) + j;
sb.append(as);
sb.append(s.substring(1));
return sb.reverse().toString();
}
}
代码有点繁琐 不过完成了功能。
上面的代码有Bug 以下的代码是正确能输出结果的
import java.util.Scanner;
class AddLong {
public static void main(String args[]) {
Scanner sac = new Scanner(System.in);
while (sac.hasNext()) {
String str1 = sac.next();
String str2 = sac.next();
System.out.println(add(str1, str2));
}
}
public static String add(String str1, String str2) {
int j = 0;
StringBuffer sb1 = new StringBuffer(
(str1.length() > str2.length() ? str1 : str2));
StringBuffer sb2 = new StringBuffer(
(str1.length() > str2.length() ? str2 : str1));
sb1 = sb1.reverse();
sb2 = sb2.reverse();
StringBuffer sb = new StringBuffer();
System.out.println(sb1.length() - sb2.length());
while (sb1.length() != sb2.length()) {
sb2.append(0);
}
for (int i = 0; i < sb1.length(); i++) {
int temp = Integer.valueOf(sb1.substring(i, i + 1))
+ Integer.valueOf(sb2.substring(i, i + 1)) + j;
int m = temp % 10;
j = temp / 10;
sb.append(m);
}
if (j != 0)
sb.append(1);
return sb.reverse().toString();
}
}