算法提高 P1001
来源:互联网 发布:礼品卡兑换系统源码 编辑:程序博客网 时间:2024/04/30 08:50
当两个比较大的整数相乘时,可能会出现数据溢出的情形。为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法。具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过8位,然后把它们相乘的结果存储在另一个字符串当中(长度不会超过16位),最后把这个字符串打印出来。例如,假设用户输入为:62773417和12345678,则输出结果为:774980393241726.
输入:
62773417 12345678
输出:
774980393241726
//因为一个a位数乘一个b位数只能得到一个(a+b)或(a+b-1)位数;或者有乘数为0,则结果为0import java.util.*;public class Main{public static void main(String args[]){Scanner sc=new Scanner(System.in);String s1=sc.next();String s2=sc.next();int len1=s1.length();int len2=s2.length();int p=len1+len2;int k[]=new int[p];//存每个位数上的数值(eg.k[6]=8表示10^6数位上的值为8,也就是8*10^6)int m=0;for(int i=0;i<len1;i++){//将各数位上的数相乘,结果存到数组中对应的位数上for(int j=0;j<len2;j++){m=i+j;k[m]+=(int)(s1.charAt(len1-1-i)-48)*(int)(s2.charAt(len2-1-j)-48);}}for(int i=0;i<k.length;i++){//将>=10的数进位if(k[i]>=10){k[i+1]+=k[i]/10;k[i]%=10;}}if(k[p-1]==0&&k[p-2]==0)//如果前两位都为0,证明乘数中至少一个为0,因此输出结果为0System.out.println(0);else{if(k[p-1]!=0)//如果第一位不为0,输出;为0,跳过(不输出)System.out.print(k[p-1]);for(int i=p-2;i>=0;i--){//剩下位数依次输出System.out.print(k[i]);}}sc.close();}}
1 0
- 算法提高 P1001
- 算法提高 P1001
- 算法提高 P1001
- 算法提高 P1001
- 蓝桥杯 算法提高 P1001
- 算法提高 P1001
- 算法提高 P1001
- 算法提高 P1001
- 算法提高 P1001
- 算法提高 ADV-197 P1001
- 算法提高 P1001 (大数乘法)
- 算法提高 P1001 (大数相乘)
- 蓝桥杯 ADV-197 算法提高 P1001
- 蓝桥杯 ADV-197 算法提高 P1001
- 2016蓝桥杯算法提高——P1001(大数乘法)
- P1001 蓝桥杯算法提高-用字符串处理大数乘法
- p1001
- p1001
- 1064.Complete Binary Search Tree (30)...to be continued...
- Error:Execution failed for task ':app:mergeDebugResources'. >\re
- ACTIVITI ACT_RU_EXECUTION Parallelgateway 旁支
- Python多线程编程(二)
- 《中文电子病历实体关系抽取研究》——笔记
- 算法提高 P1001
- 关于模板元编程的一点反思
- 何为相机OTP
- Android调试笔记——引用unity的库后,高德地图变成白屏。
- 1 vtk安装记录
- 按照已有的模板打印小票<二> ——调用windows打印机打印 可设置字体样式
- Java学习笔记
- 递归之 Boolean Expressions
- linux 进程状态