求两个大整数相乘的结果 不能使用BigInteger和long
2017-03-09 16:54
330 查看
提示:
1、 两个数相乘的值的位数不会超过两者位数之和
2、char转换成int时,直接用int接受的值为asiic码值, 可以使用Character.getNumericValue(‘3’) 获取实际数值
3、乘数 * 被乘数 将各位置分别相乘时,要注意索引位置, 最后再计算进数
4、消除字符串前面的无效字符0, 此处使用正则表达式替换
代码:
public static String caculate(String num1,String num2) {
int length = num1.length() + num2.length(); //两个数相乘的值不会超过两者位数之和
int[] array = new int[length];
for(int i = num1.length() - 1; i >= 0; i--) {
int temp1 = Character.getNumericValue(num1.charAt(i));
if(temp1 == 0)
continue;
int index = num1.length() - i -1; // 乘数的位置 个位 0 十位 1 以此类推
for(int j = num2.length()-1; j >= 0; j--) {
int temp2 = Character.getNumericValue(num2.charAt(j));
//乘数的某一位与被乘数 各位依次相乘 并且位置index要依次根据乘法运算依次递增
array[index++] += temp1 * temp2;
}
}
StringBuilder sb = new StringBuilder();
for(int i = 0;i < array.length;i++) {
if(array[i] > 10) {
int overValue = array[i] / 10;
array[i+1] += overValue;
array[i] %= 10;
}
sb.insert(0, array[i]);
}
//去掉字符串前面的0
return sb.toString().replaceAll("^0*", "");
}
1、 两个数相乘的值的位数不会超过两者位数之和
2、char转换成int时,直接用int接受的值为asiic码值, 可以使用Character.getNumericValue(‘3’) 获取实际数值
3、乘数 * 被乘数 将各位置分别相乘时,要注意索引位置, 最后再计算进数
4、消除字符串前面的无效字符0, 此处使用正则表达式替换
代码:
public static String caculate(String num1,String num2) {
int length = num1.length() + num2.length(); //两个数相乘的值不会超过两者位数之和
int[] array = new int[length];
for(int i = num1.length() - 1; i >= 0; i--) {
int temp1 = Character.getNumericValue(num1.charAt(i));
if(temp1 == 0)
continue;
int index = num1.length() - i -1; // 乘数的位置 个位 0 十位 1 以此类推
for(int j = num2.length()-1; j >= 0; j--) {
int temp2 = Character.getNumericValue(num2.charAt(j));
//乘数的某一位与被乘数 各位依次相乘 并且位置index要依次根据乘法运算依次递增
array[index++] += temp1 * temp2;
}
}
StringBuilder sb = new StringBuilder();
for(int i = 0;i < array.length;i++) {
if(array[i] > 10) {
int overValue = array[i] / 10;
array[i+1] += overValue;
array[i] %= 10;
}
sb.insert(0, array[i]);
}
//去掉字符串前面的0
return sb.toString().replaceAll("^0*", "");
}
相关文章推荐
- 编写函数求两个整数 a 和 b 之间的较大值。要求不能使用if, while, switch, for, ?: 以及任何的比较语句
- 输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b,使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果
- 题目:给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。
- 12_2求两个整数中的较小值,要求不能使用比较运算符, if-else, a>b?a:b, while for
- 1.A+B问题 给出两个整数A和B, 求他们的和, 但不能使用 + 等数学运算符。
- 给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。
- 给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。
- lintcode 给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。
- 位运算训练05—输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b; 使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果
- 5.题目:输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b,使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果 提示:0 ^ 0 = 0; 1 ^ 1 = 0;
- 编写函数求两个整数 a 和 b 之间的较大值。要求不能使用if, while, switch, for, ?: 以及任何的比较语句
- 输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b,使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果
- 输入个32位的整数a,使用按位异或^运算,生成一个新的32位整数b,使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果
- 算法--两种方法实现一个Add函数,让两个整数相加,但是不能使用+、-、*、/等四则运算符。
- 给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。
- TF:Tensorflow之session会话的使用,定义两个矩阵,两种方法输出2个矩阵相乘的结果—Jason niu
- 比较两个整数的大小,不能使用 &quot;if&quot;, &quot;?:&quot;, &quot;switch&quot; 等
- java算法4~交换两个整数,不能使用任何额外的变量
- 输入一个32位的整数啊,使用按位异或运算,生成一个新的32位整数b,使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果
- [LeetCode-29] Divide Two Integers(两个整数相除,不能使用乘除取余算术符)