您的位置:首页 > 其它

仿网易一元夺宝算法,宽长度数据计算,字符串实现

2014-12-10 00:00 351 查看
摘要: 仿网易一元夺宝算法,宽长度数据计算,字符串实现

/**

* @company

* @version 1.0

* @author fangjianming

* @email fangjianming_gis@163.com

* @date 2014年12月10日

*/

public class Cal {

public static void main(String[] args) {

String value = "581999974";

String value2 = "46658";

long bet = 100;

String value3 = "10000001";

// 计算求和

int []eleven = addString(value,value2);

// 计算求余数

long result = divideInt(eleven,bet);

// 计算结果

int []intValue = addString(value3,String.valueOf(result));

// Int[]转Char[]

char [] charValue = transIntArrayToCharArray(intValue);

System.out.print(charValue);

}

// Int[]转Char[]

private static char[] transIntArrayToCharArray(int[] intValue) {

if(intValue == null || intValue.length ==0 )

throw new NullPointerException("eleven must bot be null");

char[] charValue = new char[intValue.length];

int i = 0;

for(int value:intValue)

{

charValue[i++] = (char) (value +48);

}

return charValue;

}

// 计算求余数

private static long divideInt(int[] eleven, long divide) {

if(eleven == null || eleven.length ==0 )

throw new NullPointerException("eleven must bot be null");

if(divide == 0)

throw new NullPointerException("divide must bot be zero");

long result = 0;

int len = eleven.length;

for(int i = 0;i<len ;i++)

{

int tmp = eleven[i];

result = tmp+10*result;

if(result >= divide)

{

result %= divide;

}

}

return result;

}

// 计算求和

public static int [] addString(String value1,String value2)

{

if(value1 == null || value2 == null || value1 =="" ||value2 == "")

throw new NullPointerException("value1 and value2 must bot be null");

String max = (value1.length() > value2.length())?value1:value2;

String min = (value1.length() <= value2.length())?value1:value2;

int len = max.length();

int len2 = min.length();

int ten = 0;

int ge = 0;

int []eleven = new int[len];

for (int i = max.length()-1,j = min.length()-1 ; i >= 0 ;i--,j--)

{

int a1 = 0;

int a2 = 0;

a1 = max.charAt(i)-48;

if(j>=0)

a2 = min.charAt(i-(max.length()-min.length()))-48;

ge = (a1+a2+ten) % 10;

ten = (a1+a2) / 10;

eleven[i] = ge;

}

if(ten >0)

{

int []eleven2 = new int[len+1];

eleven2[0] = ten;

for(int j = 0;j <len ;j++)

{

eleven2[j+1] = eleven[j];

}

return eleven2;

}

return eleven;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: