目录

1 问题描述

2 解决方案

 


1 问题描述

当两个比较大的整数相乘时,可能会出现数据溢出的情形。为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法。具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过8位,然后把它们相乘的结果存储在另一个字符串当中(长度不会超过16位),最后把这个字符串打印出来。例如,假设用户输入为:62773417和12345678,则输出结果为:774980393241726.

输入:
  62773417 12345678

输出:
  774980393241726


2 解决方案

此题考查使用字符串来计算具体整数的乘法运算,由于题目说明输入的均为数字,所以代码中不需要做出是否为数字的判断,但要防备一点,输出负数的情况。虽然,测试数据中没有负数情况,但是做题的时候还是要考虑到~

具体代码如下:

import java.util.Scanner;

public class Main {

    public 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 main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
String A = in.next(); //注意,in.next表示遇到空格就不再读入
String B = in.next();
test.printResult(A, B);
}
}

算法笔记_097:蓝桥杯练习 算法提高 P1001(Java)的更多相关文章

  1. 算法笔记_083:蓝桥杯练习 合并石子(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数.求把所有石子 ...

  2. 算法笔记_107:蓝桥杯练习 算法提高 学霸的迷宫(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要 ...

  3. 算法笔记_096:蓝桥杯练习 算法提高 求最大值(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 给n个有序整数对ai bi,你需要选择一些整数对 使得所有你选定的数的ai+bi的和最大.并且要求你选定的数对的ai之和非负,bi之和非负 ...

  4. 算法笔记_076:蓝桥杯练习 结点选择(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 有一棵 n 个节点的树,树上每个节点都有一个正整数权值.如果一个点被选择了,那么在树上和它相邻的点都不能被选择.求选出的点的权值和最大是多 ...

  5. 算法笔记_067:蓝桥杯练习 算法训练 安慰奶牛(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是 ...

  6. 算法笔记_075:蓝桥杯练习 最短路(Java)

    目录 1 问题描述 2 解决方案 2.1 floyd算法解决 2.2 spfa算法解决   1 问题描述 问题描述 给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环).请你计算从 ...

  7. 算法笔记_064:蓝桥杯练习 操作格子(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 有n个格子,从左到右放成一排,编号为1-n. 共有m次操作,有3种操作类型: 1.修改一个格子的权值, 2.求连续一段格子权值和, 3.求 ...

  8. 算法笔记_081:蓝桥杯练习 算法提高 矩阵乘法(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 有n个矩阵,大小分别为a0*a1, a1*a2, a2*a3, ..., a[n-1]*a[n],现要将它们依次相乘,只能使用结合率,求最 ...

  9. 算法笔记_106:蓝桥杯练习 算法提高 周期字串(Java)

    目录 1 问题描述 2 解决方案 2.1 第一印象解法(80分) 2.2 借鉴网友解法(100分)   1 问题描述 问题描述 右右喜欢听故事,但是右右的妈妈总是讲一些“从前有座山,山里有座庙,庙里有 ...

随机推荐

  1. CSS页面排版的一点笔记

    CSS页面排版 字体族 字体族的值是一个字体备选列表,多个字体使用英文逗号隔开,字体名称如果有空格则需要引号. font-family: "Georgia Pro", " ...

  2. Python标准库:内置函数divmod(a, b)

    本函数是实现a除以b,然后返回商与余数的元组. 如果两个参数a,b都是整数,那么会采用整数除法,结果相当于(a//b, a % b).如果a或b是浮点数,相当于(math.floor(a/b), a% ...

  3. bzoj 2665: [cqoi2012]编号

    题目中说任意两个数至少要有3个位上数不相同,那么其实也就是从7个数中选出5个这样任意的组合全部不同,用数组f[i][j][k][l][m][n]记一下就好了,i为第几种组合,一共C(7,5)种,最后爆 ...

  4. 网络编程之tcp五层模型

    网络编程 1.客户端与服务端架构:C/S   B/S  架构 client <-------基于网络通信-------->server brower<-------基于网络通信--- ...

  5. 在iOS项目中使用截图

    最近项目中要求将个人的信息生成一张图片,以名片的方式分享出去.由此就需要使用截图功能.需求如图: 代码如下:

  6. fedora19/opensuse13.1 配置openvpn client

    Date: 20140207Auth: Jin 1.install # yum -y install openvpn #zypper install openvpn 2.copy user key # ...

  7. HDU 2389 Rain on your Parade(二分匹配,Hopcroft-Carp算法)

    Rain on your Parade Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 655350/165535 K (Java/Ot ...

  8. 打印出C# 中float ,double 在内存中的存放形式

    float floatA = 2.2f; ); ; i < ;++i ) { uint temp = 0x80000000 & (a << i); ) { Console.W ...

  9. java锁对象

    在Java5中,专门提供了锁对象,利用锁可以方便的实现资源的封锁,用来控制对竞争资源并发访问的控制,这些内容主要集中在java.util.concurrent.locks 包下面,里面有三个重要的接口 ...

  10. [Android Pro] 使用CursorLoader异步加载数据 from 3.0

    Android 3.0引入了CursorLoader实现异步加载数据,为了避免同步查询数据库时阻塞UI线程的问题.在API 11之前可以通过下载支持库,来使之前的系统支持此功能,下载页面为 http: ...