看了最强大脑的速算,自己也想编个程序进行大数据的乘除。正好用最强大脑的题目进行验证。思路很简单,都是纯模拟。乘法很快就实现了,除法调bug调了好久。现在把代码贴出来看一下,以后经验多了再回来修改
乘法:
public StringBuffer time(StringBuffer a,StringBuffer b){
int length_a=a.length();
int length_b=b.length();
int i;
int j;
a.reverse();
b.reverse();
Vector<StringBuffer> buffers=new Vector<>();
StringBuffer final_result=new StringBuffer();
for(i=0;i<length_b;i++){
StringBuffer temp=new StringBuffer();
int jinwei=0;
for(j=i;j>0;j--){
temp.append("0");
}
for(j=0;j<length_a;j++){
int temp_result=Integer.parseInt(a.charAt(j)+"")
*Integer.parseInt(b.charAt(i)+"")+jinwei;
temp.append(temp_result%10+"");
jinwei=temp_result/10;
}
if(jinwei>0) temp.append(jinwei);
buffers.add(temp);
}
boolean has_add=false;
int length=0;
int jinwei=0;
while(true){
has_add=false;
int temp_result=0;
for(i=0;i<buffers.size();i++){
if(buffers.get(i).length()>length){
temp_result+=Integer.parseInt(buffers.get(i).charAt(length)+"");
has_add=true;
}
}
if(!has_add) break;
temp_result+=jinwei;
final_result.append(temp_result%10);
jinwei=temp_result/10;
length++;
}
if(jinwei>0) final_result.append(jinwei);
return final_result.reverse();
}
除法(非常乱的代码,自己都不好意思写了)
public class Divide {
public static void main(String[] args) {
StringBuffer a = new StringBuffer("11484484010043");
StringBuffer b = new StringBuffer("5636587");
Divide divide = new Divide();
System.out.println("result= " + divide.divide(a, b));
}
public StringBuffer divide(StringBuffer a, StringBuffer b) {
StringBuffer final_result = new StringBuffer();
StringBuffer beijianshu = new StringBuffer();
Vector<StringBuffer> numbers = timeANumber(b);
int startPosition;
int i, j;
if (b.toString().compareTo(a.toString().substring(0, b.length())) > 0) {
// 除数大(前几位)
startPosition = b.length();
beijianshu.append(a.toString().substring(0, b.length() + 1));
} else {
// 被除数大(前几位)
startPosition = b.length() - 1;
beijianshu.append(a.toString().substring(0, b.length()));
}
boolean equal = false;
for (i = startPosition; i < a.length(); i++) {
equal = false;
// 求商
// 商0
if (b.length() > beijianshu.length()
|| b.length() == beijianshu.length() && b.toString().compareTo(beijianshu.toString()) > 0) {
final_result.append('0');
equal = true;
if (i < a.length() - 1)
beijianshu.append(a.charAt(i + 1));
continue;
}
// 若不为0
for (j = 0; j < 9; j++) {
if (numbers.get(j).length() == beijianshu.length()
&& beijianshu.toString().equals(numbers.get(j).toString())) {
final_result.append((j + 1) + "");
equal = true;
beijianshu.delete(0, beijianshu.length());
break;
}
equal = false;
if (numbers.get(j).length() == beijianshu.length()
&& beijianshu.toString().compareTo(numbers.get(j).toString()) < 0) {
final_result.append((j) + "");
break;
}
if (numbers.get(j).length() > beijianshu.length()) {
final_result.append((j) + "");
break;
}
}
if (numbers.get(8).length() < beijianshu.length() || numbers.get(8).length() == beijianshu.length()
&& numbers.get(8).toString().compareTo(beijianshu.toString()) < 0) {
final_result.append('9');
}
// 减
if (j > 0 && equal == false) {
StringBuffer temp_beijianshu = new StringBuffer(beijianshu.toString());
StringBuffer temp_jianshu = new StringBuffer(numbers.get(j - 1).toString());
beijianshu.delete(0, beijianshu.length());
temp_beijianshu.reverse();
temp_jianshu.reverse();
while (temp_beijianshu.length() != temp_jianshu.length())
temp_jianshu.append('0');
for (j = 0; j < temp_jianshu.length(); j++) {
if (temp_beijianshu.charAt(j) < temp_jianshu.charAt(j)) {
beijianshu.append(10 + Integer.parseInt(temp_beijianshu.charAt(j) + "")
- Integer.parseInt(temp_jianshu.charAt(j) + ""));
int k;
for (k = j + 1; k < temp_beijianshu.length(); k++) {
if (temp_beijianshu.charAt(k) != '0') {
temp_beijianshu.setCharAt(k, (char) (temp_beijianshu.charAt(k) - 1));
break;
} else {
temp_beijianshu.setCharAt(k, '9');
}
}
} else {
beijianshu.append((Integer.parseInt(temp_beijianshu.charAt(j) + "")
- Integer.parseInt(temp_jianshu.charAt(j) + "")));
}
}
beijianshu.reverse();
}
int k;
for (k = 0; k < beijianshu.length(); k++) {
if (beijianshu.charAt(k) != '0')
break;
}
beijianshu.delete(0, k);
// 上数
if (i < a.length() - 1)
beijianshu.append(a.charAt(i + 1));
}
return final_result;
}
public Vector<StringBuffer> timeANumber(StringBuffer a) {
Vector<StringBuffer> final_result = new Vector<StringBuffer>();
StringBuffer chengshu = new StringBuffer(a.toString());
int i, j;
chengshu.reverse();
for (i = 1; i <= 9; i++) {
StringBuffer temp_result = new StringBuffer();
int jinwei = 0;
for (j = 0; j < chengshu.length(); j++) {
int result = i * Integer.parseInt(chengshu.charAt(j) + "") + jinwei;
temp_result.append(result % 10);
jinwei = result / 10;
}
if (jinwei != 0)
temp_result.append(jinwei);
final_result.add(temp_result.reverse());
}
return final_result;
}
}