Java实现 蓝桥杯 算法提高 p1001
2023-09-14 08:58:17 时间
算法提高 P1001
时间限制:1.0s 内存限制:256.0MB
提交此题
当两个比较大的整数相乘时,可能会出现数据溢出的情形。为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法。具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过8位,然后把它们相乘的结果存储在另一个字符串当中(长度不会超过16位),最后把这个字符串打印出来。例如,假设用户输入为:62773417和12345678,则输出结果为:774980393241726.
输入:
62773417 12345678
输出:
774980393241726
import java.math.BigDecimal;
import java.util.Scanner;
public class p1001 { public static void printResult(String A, String B) {
char[] arrayA = A.toCharArray();
char[] arrayB = B.toCharArray();
int len = A.length() + B.length();
int judge = 1; //用于判定A*B最终结果正负,1代表为正,-1表示为负
int enda = 0, endb = 0; //用于指定A和B中最后一个数字的位置(从后往前遍历)
if(arrayA[0] == '-' && arrayB[0] != '-') {
judge = -1;
len = len - 1;
enda = 1;
} else if(arrayA[0] != '-' && arrayB[0] == '-') {
judge = -1;
len = len - 1;
endb = 1;
} else if(arrayA[0] == '-' && arrayB[0] == '-') {
len = len - 2;
enda = 1;
endb = 1;
}
int[] result = new int[len];
int a, b;
for(int i = A.length() - 1, tempi = 0; i >= enda;i--,tempi++) {
a = arrayA[i] - '0';
for(int j = B.length() - 1, tempj = 0;j >= endb;j--, tempj++) {
b = arrayB[j] - '0';
result[len-tempi-tempj-2] += (result[len-tempi-tempj-1] + a * b) / 10; //进位操作
result[len-tempi-tempj-1] = (result[len-tempi-tempj-1] + a * b) % 10; //当前位的数
}
}
int i = 0;
while(result[i] == 0 && i < len - 1)
i++; //除去结果前面的所有多余0,此处使用len-1是因为,若结果全为0,输出最后一个0
if(judge == -1)
System.out.print("-");
for(;i < len;i++)
System.out.print(result[i]);
}
public static void biginteger(String a,String b){
BigDecimal aa = new BigDecimal(a);
BigDecimal bb = new BigDecimal(b);
System.out.println(aa.multiply(bb).toString());
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String A = in.next(); //注意,in.next表示遇到空格就不再读入
String B = in.next();
// printResult(A, B);
biginteger(A,B);
}
}
相关文章
- Java实现面试常考的算法
- java从入门到精通_Java 入门到精通的过程
- java软件工程师是做什么的_JAVA软件工程师是做什么的?
- java启动器_JAVA基础:Java 启动器如何查找类
- java环境_Java基础篇——环境配置
- Java数组常用算法
- java 优先级队列_JAVA 队列
- Java 8 的 java.util.function.* POJO 的反射新方法
- Java 对称加密几种算法分别实现详解编程语言
- java 排序算法详解编程语言
- 中的应用Java中MySQL的灵活运用(mysql在java代码)
- java实现的一个【快速排序 】算法【原创】详解编程语言
- 系统命令Java实现Linux系统命令调用的探究(java调用linux)
- Java调用Redis实现高性能数据存储(java调用redis)
- Java操作Redis实现数据快速存取(java访问redis)
- Java实现MySQL数据插入(java插入mysql)
- 使用Java连接SQL Server数据库,轻松实现数据交互(java连sqlserver)
- Java连接Oracle实现简单快捷的数据传输(java联结oracle)
- Java与Oracle 一种天生的结合(java属于oracle)
- Java使用Oracle实现优雅数据查询(java.oracle)
- 安装Oracle JDK 从Java进入下一个级别(oracle下载java)
- Redis中使用Java快速实现自增(redis自增 java)
- JAVA简单选择排序算法原理及实现
- 基于Java实现的图的广度优先遍历算法