java 大数四则运算
上一篇 / 下一篇 2013-07-23 23:08:59 / 个人分类:开发知识
package com.zju.hw;
import java.util.Scanner;
public class BigCal {
static public String calBigUnsignPlus(String first,String second){
String result = new String();
StringBuffer calTmp = new StringBuffer();
char [] firstChars = first.toCharArray();
char [] secondChars = second.toCharArray();
int firstLength = firstChars.length;
int secondLength = secondChars.length;
int jinwei = 0;
char cal = '0';
for (int i=firstLength-1,j=secondLength-1;i>=0 || j>=0;i--,j--){
if( i >= 0 && j >= 0){
int f = Integer.parseInt(String.valueOf(firstChars[i]));
int s = Integer.parseInt(String.valueOf(secondChars[j]));
Integer tmp = f + s + jinwei;
char [] tmpSum = tmp.toString().toCharArray();
if (tmpSum.length == 2){
jinwei = 1;
cal = tmpSum[1];
}
else{
if ( tmpSum.length == 1)
{
jinwei = 0;
cal = tmpSum [0];
}
}
calTmp.append(cal);
}
else{
int ne = ( i >= 0)?Integer.parseInt(String.valueOf(firstChars[i])):
Integer.parseInt(String.valueOf(secondChars[j]));
Integer tmp = one + jinwei;
char [] tmpSum = tmp.toString().toCharArray();
if (tmpSum.length == 2){
jinwei = 1;
cal = tmpSum[1];
}
else{
if ( tmpSum.length == 1)
{
jinwei = 0;
cal = tmpSum [0];
}
}
calTmp.append(cal);
}
}
result = calTmp.reverse().toString();
return result;
}
static public String calBigUnsignMinus(String first,String second){
String result = new String();
StringBuffer calTmp = new StringBuffer();
String resultFinal = new String();
int jiewei = 0 ;
char cal = '0';
String beijianshu = new String ();
String flag ="";
String jianshu = new String ();
if (first.length() > second.length()){
beijianshu = first;
jianshu = second;
}
else {
if (first.length() < second.length()){
beijianshu = second;
jianshu = first;
flag = "-";
}
else {
if (first.compareTo(second) > 0){
beijianshu = first;
jianshu = second;
}
else {
beijianshu = second;
jianshu = first;
flag = "-";
}
}
}
char [] beijian = beijianshu.toCharArray();
char [] jians = jianshu.toCharArray();
for (int i = beijian.length-1,j=jians.length-1;i>=0 || j>=0; i--,j--){
if (i>=0 && j>=0){
Integer bjs = Integer.parseInt(String.valueOf(beijian[i]));
Integer js = Integer.parseInt(String.valueOf(jians[j]));
Integer tmp = bjs - js - jiewei + 10;
char [] tmpSum = tmp.toString().toCharArray();
if (tmpSum.length == 2){
jiewei = 0;
cal = tmpSum[1];
}
else{
if ( tmpSum.length == 1)
{
jiewei = 1;
cal = tmpSum [0];
}
}
calTmp.append(cal);
}
else {
Integer bjs = Integer.parseInt(String.valueOf(beijian[i]));
Integer tmp = bjs - jiewei + 10;
char [] tmpSum = tmp.toString().toCharArray();
if (tmpSum.length == 2){
jiewei = 0;
cal = tmpSum[1];
}
else{
if ( tmpSum.length == 1)
{
jiewei = 1;
cal = tmpSum [0];
}
}
calTmp.append(cal);
}
}
result = calTmp.reverse().toString();
result = result.replaceFirst("^0+", "");
if (result.length() == 0){
resultFinal = "0";
}
else
resultFinal = flag+result;
return resultFinal;
}
static public String calBigUnsignMul(String first,String second){
String result = new String();
StringBuffer calTmp ;
char [] firstChars = first.toCharArray();
char [] secondChars = second.toCharArray();
int jinwei = 0 ;
char cal = '0';
String [] sumPer = new String [firstChars.length+1];
for (int i=firstChars.length-1,k=0,l=firstChars.length;i>=0;i--,l--,k++){
calTmp = new StringBuffer();
for (int z=0;z<k;z++){
calTmp.append('0');
}
int f = Integer.parseInt(String.valueOf(firstChars[i]));
for (int j=secondChars.length-1;j>=0;j--){
int s = Integer.parseInt(String.valueOf(secondChars[j]));
Integer tmp = f * s + jinwei;
char [] tmpMul = tmp.toString().toCharArray();
if (tmpMul.length == 2){
jinwei = Integer.valueOf(String.valueOf(tmpMul[0]));
cal = tmpMul[1];
}
else {
jinwei = 0;
cal = tmpMul[0];
}
calTmp.append(cal);
}
sumPer[l] = calTmp.reverse().toString().replaceFirst("^0", "");
}
calTmp = new StringBuffer();
for (int z=0;z<=firstChars.length;z++){
calTmp.append('0');
}
calTmp.append(jinwei);
sumPer[0] = calTmp.reverse().toString();
String first1 = new String ();
String second1 = new String();
if (sumPer.length <= 1)
result = sumPer[0];
else{
first1 = sumPer[0];
for (int i=1;i<sumPer.length;i++){
second1 = sumPer[i];
first1 = BigCal.calBigUnsignPlus(first1, second1);
}
result = first1;
}
result = result.replaceFirst("^0+", "");
if (result.length() == 0)
result = "0";
; return result;
}
static public String calBigUnsignDiv(String first,String second){
String result = "";
String yushu = new String();
String beichushu = new String();
String chushu = new String();
if (first.length() > second.length()){
beichushu = first;
chushu = second;
}
else {
if (first.length() < second.length()){
result = "0:" + first;
return result;
}
else {
if (first.compareTo(second) >= 0){
beichushu = first;
chushu = second;
}
else {
result = "0:" + first;
return result;
}
}
}
StringBuffer tmpResult = new StringBuffer();
if(chushu.length()==1)
yushu = "";
else
yushu = beichushu.substring(0,chushu.length()-1);
int count = 0;
char []beichushuArrays = beichushu.toCharArray();
for (int i = chushu.length()-1;i<beichushu.length();i++){
count = 0;
if (yushu.startsWith("-")){
yushu = BigCal.calBigUnsignMinus(chushu,yushu.replaceAll("^-", ""));
}
yushu = (yushu + Character.valueOf(beichushuArrays[i]).toString()).replaceFirst("^0+", "");
String tmp = BigCal.calBigUnsignMinus(yushu,chushu);
yushu = tmp;
while (!tmp.startsWith("-")){
count++;
yushu = tmp;
tmp = BigCal.calBigUnsignMinus(yushu, chushu);
}
tmpResult.append(Integer.valueOf(count).toString());
}
if (yushu.startsWith("-")){
yushu = BigCal.calBigUnsignMinus(chushu,yushu.replaceAll("^-", ""));
}
if (result.equals("")){
yushu = yushu.replaceFirst("^0+", "");
yushu = (yushu.length()==0)?"0":yushu;
result = tmpResult.toString().replaceFirst("^0+", "")+ ":" + yushu;
}
else
result = "0:"+ yushu.replaceFirst("^0+", "");
return result;
}
static public String callPlus(String first,String second){
String result = new String();
if (!first.startsWith("-")&&!second.startsWith("-")){
result = BigCal.calBigUnsignPlus(first, second);
}
else {
if (first.startsWith("-") && second.startsWith("-")){
result = BigCal.calBigUnsignPlus(first.replaceFirst("^-",""), second.replaceFirst("^-", ""));
result = "-" + result;
}
else {
if (first.startsWith("-") && !second.startsWith("-")){
result = BigCal.calBigUnsignMinus(second, first.replaceFirst("^-", ""));
}
else
{
if (!first.startsWith("-") && second.startsWith("-"))
result = BigCal.calBigUnsignPlus(first, second.replaceFirst("^-", ""));
}
}
}
return result;
}
static public String callMinus(String first,String second){
String result = new String();
if (!first.startsWith("-") && !second.startsWith("-"))
result = BigCal.calBigUnsignMinus(first, second);
else {
if(first.startsWith("-") && second.startsWith("-")){
result = BigCal.calBigUnsignMinus(second.replaceFirst("^-", ""), first.replaceFirst("^-", ""));
}
else {
if (first.startsWith("-") && !second.startsWith("-")){
result = BigCal.calBigUnsignPlus(first.replaceFirst("^-", ""), second);
result = "-" + result;
}
else {
if (!first.startsWith("-") && second.startsWith("-")){
result = BigCal.callPlus(first, second.replaceFirst("^-", ""));
}
}
}
}
return result;
}
static public String calMul(String first,String second){
String result = new String();
if (first.startsWith("-") || second.startsWith("-")){
result = BigCal.calBigUnsignMul(first.replaceFirst("^-", ""), second.replaceFirst("^-", ""));
result = "-" + result;
}
else
result = BigCal.calBigUnsignMul(first, second);
return result;
}
static public String calDiv(String first,String second){
String result = new String();
if (!first.startsWith("-") && !second.startsWith("-")){
result = BigCal.calBigUnsignDiv(first, second);
}
else if (first.startsWith("-") && second.startsWith("-")){
result = BigCal.calBigUnsignDiv(first.replaceFirst("^-", ""), second.replaceFirst("^-", ""));
String [] tmp = result.split(":",-1);
if (!tmp[1].equals("0")){
String shang = BigCal.calBigUnsignPlus(tmp[0].replaceFirst("^-", ""), "1");
String yushu = BigCal.calBigUnsignMinus(second.replaceFirst("^-", ""), tmp[1].replaceFirst("^-", ""));
result = shang +":"+yushu;
}
}
else {
if (!first.startsWith("-") && second.startsWith("-")){
result = BigCal.calBigUnsignDiv(first.replaceFirst("^-", ""), second.replaceFirst("^-", ""));
String [] tmp = result.split(":",-1);
if (!tmp[1].equals("0")){
String shang = BigCal.calBigUnsignPlus(tmp[0], "1");
String yushu = BigCal.calBigUnsignMinus(second.replaceFirst("^-", ""), tmp[1].replaceFirst("^-", ""));
result = "-"+shang +":"+yushu;
}
else
result = "-"+result ;
}
else if (first.startsWith("-") && !second.startsWith("-")){
result = BigCal.calBigUnsignDiv(first.replaceFirst("^-", ""), second);
String [] tmp = result.split(":",-1);
if (!tmp[1].equals("0")){
String shang = BigCal.calBigUnsignPlus(tmp[0], "1");
String yushu = BigCal.calBigUnsignMinus(second, tmp[1].replaceFirst("^-", ""));
result = "-"+shang +":"+yushu;
}
else
result = "-"+result ;
}
}
return result;
}
public static void main(String args[]){
String first = "";
String second = "";
Scanner scanner = new Scanner(System.in);
System.out.print("please input two big number:\n");
first= scanner.nextLine();
second = scanner.nextLine();
String result = BigCal.calBigUnsignMinus(first, second);
System.out.println("Minus result = " + result);
result = BigCal.calBigUnsignPlus(first, second);
System.out.println("Plus result = "+result);
result = BigCal.calBigUnsignMul(first, second);
System.out.println("Mul result = "+result);
result = BigCal.calDiv(first, second);
System.out.println("Div result = "+result);
}
}
import java.util.Scanner;
public class BigCal {
static public String calBigUnsignPlus(String first,String second){
String result = new String();
StringBuffer calTmp = new StringBuffer();
char [] firstChars = first.toCharArray();
char [] secondChars = second.toCharArray();
int firstLength = firstChars.length;
int secondLength = secondChars.length;
int jinwei = 0;
char cal = '0';
for (int i=firstLength-1,j=secondLength-1;i>=0 || j>=0;i--,j--){
if( i >= 0 && j >= 0){
int f = Integer.parseInt(String.valueOf(firstChars[i]));
int s = Integer.parseInt(String.valueOf(secondChars[j]));
Integer tmp = f + s + jinwei;
char [] tmpSum = tmp.toString().toCharArray();
if (tmpSum.length == 2){
jinwei = 1;
cal = tmpSum[1];
}
else{
if ( tmpSum.length == 1)
{
jinwei = 0;
cal = tmpSum [0];
}
}
calTmp.append(cal);
}
else{
int ne = ( i >= 0)?Integer.parseInt(String.valueOf(firstChars[i])):
Integer.parseInt(String.valueOf(secondChars[j]));
Integer tmp = one + jinwei;
char [] tmpSum = tmp.toString().toCharArray();
if (tmpSum.length == 2){
jinwei = 1;
cal = tmpSum[1];
}
else{
if ( tmpSum.length == 1)
{
jinwei = 0;
cal = tmpSum [0];
}
}
calTmp.append(cal);
}
}
result = calTmp.reverse().toString();
return result;
}
static public String calBigUnsignMinus(String first,String second){
String result = new String();
StringBuffer calTmp = new StringBuffer();
String resultFinal = new String();
int jiewei = 0 ;
char cal = '0';
String beijianshu = new String ();
String flag ="";
String jianshu = new String ();
if (first.length() > second.length()){
beijianshu = first;
jianshu = second;
}
else {
if (first.length() < second.length()){
beijianshu = second;
jianshu = first;
flag = "-";
}
else {
if (first.compareTo(second) > 0){
beijianshu = first;
jianshu = second;
}
else {
beijianshu = second;
jianshu = first;
flag = "-";
}
}
}
char [] beijian = beijianshu.toCharArray();
char [] jians = jianshu.toCharArray();
for (int i = beijian.length-1,j=jians.length-1;i>=0 || j>=0; i--,j--){
if (i>=0 && j>=0){
Integer bjs = Integer.parseInt(String.valueOf(beijian[i]));
Integer js = Integer.parseInt(String.valueOf(jians[j]));
Integer tmp = bjs - js - jiewei + 10;
char [] tmpSum = tmp.toString().toCharArray();
if (tmpSum.length == 2){
jiewei = 0;
cal = tmpSum[1];
}
else{
if ( tmpSum.length == 1)
{
jiewei = 1;
cal = tmpSum [0];
}
}
calTmp.append(cal);
}
else {
Integer bjs = Integer.parseInt(String.valueOf(beijian[i]));
Integer tmp = bjs - jiewei + 10;
char [] tmpSum = tmp.toString().toCharArray();
if (tmpSum.length == 2){
jiewei = 0;
cal = tmpSum[1];
}
else{
if ( tmpSum.length == 1)
{
jiewei = 1;
cal = tmpSum [0];
}
}
calTmp.append(cal);
}
}
result = calTmp.reverse().toString();
result = result.replaceFirst("^0+", "");
if (result.length() == 0){
resultFinal = "0";
}
else
resultFinal = flag+result;
return resultFinal;
}
static public String calBigUnsignMul(String first,String second){
String result = new String();
StringBuffer calTmp ;
char [] firstChars = first.toCharArray();
char [] secondChars = second.toCharArray();
int jinwei = 0 ;
char cal = '0';
String [] sumPer = new String [firstChars.length+1];
for (int i=firstChars.length-1,k=0,l=firstChars.length;i>=0;i--,l--,k++){
calTmp = new StringBuffer();
for (int z=0;z<k;z++){
calTmp.append('0');
}
int f = Integer.parseInt(String.valueOf(firstChars[i]));
for (int j=secondChars.length-1;j>=0;j--){
int s = Integer.parseInt(String.valueOf(secondChars[j]));
Integer tmp = f * s + jinwei;
char [] tmpMul = tmp.toString().toCharArray();
if (tmpMul.length == 2){
jinwei = Integer.valueOf(String.valueOf(tmpMul[0]));
cal = tmpMul[1];
}
else {
jinwei = 0;
cal = tmpMul[0];
}
calTmp.append(cal);
}
sumPer[l] = calTmp.reverse().toString().replaceFirst("^0", "");
}
calTmp = new StringBuffer();
for (int z=0;z<=firstChars.length;z++){
calTmp.append('0');
}
calTmp.append(jinwei);
sumPer[0] = calTmp.reverse().toString();
String first1 = new String ();
String second1 = new String();
if (sumPer.length <= 1)
result = sumPer[0];
else{
first1 = sumPer[0];
for (int i=1;i<sumPer.length;i++){
second1 = sumPer[i];
first1 = BigCal.calBigUnsignPlus(first1, second1);
}
result = first1;
}
result = result.replaceFirst("^0+", "");
if (result.length() == 0)
result = "0";
; return result;
}
static public String calBigUnsignDiv(String first,String second){
String result = "";
String yushu = new String();
String beichushu = new String();
String chushu = new String();
if (first.length() > second.length()){
beichushu = first;
chushu = second;
}
else {
if (first.length() < second.length()){
result = "0:" + first;
return result;
}
else {
if (first.compareTo(second) >= 0){
beichushu = first;
chushu = second;
}
else {
result = "0:" + first;
return result;
}
}
}
StringBuffer tmpResult = new StringBuffer();
if(chushu.length()==1)
yushu = "";
else
yushu = beichushu.substring(0,chushu.length()-1);
int count = 0;
char []beichushuArrays = beichushu.toCharArray();
for (int i = chushu.length()-1;i<beichushu.length();i++){
count = 0;
if (yushu.startsWith("-")){
yushu = BigCal.calBigUnsignMinus(chushu,yushu.replaceAll("^-", ""));
}
yushu = (yushu + Character.valueOf(beichushuArrays[i]).toString()).replaceFirst("^0+", "");
String tmp = BigCal.calBigUnsignMinus(yushu,chushu);
yushu = tmp;
while (!tmp.startsWith("-")){
count++;
yushu = tmp;
tmp = BigCal.calBigUnsignMinus(yushu, chushu);
}
tmpResult.append(Integer.valueOf(count).toString());
}
if (yushu.startsWith("-")){
yushu = BigCal.calBigUnsignMinus(chushu,yushu.replaceAll("^-", ""));
}
if (result.equals("")){
yushu = yushu.replaceFirst("^0+", "");
yushu = (yushu.length()==0)?"0":yushu;
result = tmpResult.toString().replaceFirst("^0+", "")+ ":" + yushu;
}
else
result = "0:"+ yushu.replaceFirst("^0+", "");
return result;
}
static public String callPlus(String first,String second){
String result = new String();
if (!first.startsWith("-")&&!second.startsWith("-")){
result = BigCal.calBigUnsignPlus(first, second);
}
else {
if (first.startsWith("-") && second.startsWith("-")){
result = BigCal.calBigUnsignPlus(first.replaceFirst("^-",""), second.replaceFirst("^-", ""));
result = "-" + result;
}
else {
if (first.startsWith("-") && !second.startsWith("-")){
result = BigCal.calBigUnsignMinus(second, first.replaceFirst("^-", ""));
}
else
{
if (!first.startsWith("-") && second.startsWith("-"))
result = BigCal.calBigUnsignPlus(first, second.replaceFirst("^-", ""));
}
}
}
return result;
}
static public String callMinus(String first,String second){
String result = new String();
if (!first.startsWith("-") && !second.startsWith("-"))
result = BigCal.calBigUnsignMinus(first, second);
else {
if(first.startsWith("-") && second.startsWith("-")){
result = BigCal.calBigUnsignMinus(second.replaceFirst("^-", ""), first.replaceFirst("^-", ""));
}
else {
if (first.startsWith("-") && !second.startsWith("-")){
result = BigCal.calBigUnsignPlus(first.replaceFirst("^-", ""), second);
result = "-" + result;
}
else {
if (!first.startsWith("-") && second.startsWith("-")){
result = BigCal.callPlus(first, second.replaceFirst("^-", ""));
}
}
}
}
return result;
}
static public String calMul(String first,String second){
String result = new String();
if (first.startsWith("-") || second.startsWith("-")){
result = BigCal.calBigUnsignMul(first.replaceFirst("^-", ""), second.replaceFirst("^-", ""));
result = "-" + result;
}
else
result = BigCal.calBigUnsignMul(first, second);
return result;
}
static public String calDiv(String first,String second){
String result = new String();
if (!first.startsWith("-") && !second.startsWith("-")){
result = BigCal.calBigUnsignDiv(first, second);
}
else if (first.startsWith("-") && second.startsWith("-")){
result = BigCal.calBigUnsignDiv(first.replaceFirst("^-", ""), second.replaceFirst("^-", ""));
String [] tmp = result.split(":",-1);
if (!tmp[1].equals("0")){
String shang = BigCal.calBigUnsignPlus(tmp[0].replaceFirst("^-", ""), "1");
String yushu = BigCal.calBigUnsignMinus(second.replaceFirst("^-", ""), tmp[1].replaceFirst("^-", ""));
result = shang +":"+yushu;
}
}
else {
if (!first.startsWith("-") && second.startsWith("-")){
result = BigCal.calBigUnsignDiv(first.replaceFirst("^-", ""), second.replaceFirst("^-", ""));
String [] tmp = result.split(":",-1);
if (!tmp[1].equals("0")){
String shang = BigCal.calBigUnsignPlus(tmp[0], "1");
String yushu = BigCal.calBigUnsignMinus(second.replaceFirst("^-", ""), tmp[1].replaceFirst("^-", ""));
result = "-"+shang +":"+yushu;
}
else
result = "-"+result ;
}
else if (first.startsWith("-") && !second.startsWith("-")){
result = BigCal.calBigUnsignDiv(first.replaceFirst("^-", ""), second);
String [] tmp = result.split(":",-1);
if (!tmp[1].equals("0")){
String shang = BigCal.calBigUnsignPlus(tmp[0], "1");
String yushu = BigCal.calBigUnsignMinus(second, tmp[1].replaceFirst("^-", ""));
result = "-"+shang +":"+yushu;
}
else
result = "-"+result ;
}
}
return result;
}
public static void main(String args[]){
String first = "";
String second = "";
Scanner scanner = new Scanner(System.in);
System.out.print("please input two big number:\n");
first= scanner.nextLine();
second = scanner.nextLine();
String result = BigCal.calBigUnsignMinus(first, second);
System.out.println("Minus result = " + result);
result = BigCal.calBigUnsignPlus(first, second);
System.out.println("Plus result = "+result);
result = BigCal.calBigUnsignMul(first, second);
System.out.println("Mul result = "+result);
result = BigCal.calDiv(first, second);
System.out.println("Div result = "+result);
}
}
TAG:
标题搜索
日历
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
1 | 2 | 3 | 4 | ||||||
5 | 6 | 7 | 8 | 9 | 10 | 11 | |||
12 | 13 | 14 | 15 | 16 | 17 | 18 | |||
19 | 20 | 21 | 22 | 23 | 24 | 25 | |||
26 | 27 | 28 | 29 | 30 | 31 |
我的存档
数据统计
- 访问量: 143533
- 日志数: 50
- 建立时间: 2011-09-28
- 更新时间: 2014-01-10