蓝桥杯BASIC_29(高精度加法)
来源:互联网 发布:淘宝宝贝详情页怎么做 编辑:程序博客网 时间:2024/06/14 10:46
问题描述
输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。
算法描述
由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。
定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b。
计算c = a + b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C[0],即C[0]等于(A[0]+B[0])%10。然后计算A[1]与B[1]相加,这时还应将低位进上来的值r也加起来,即C[1]应该是A[1]、B[1]和r三个数的和.如果又有进位产生,则仍可将新的进位存入到r中,和的个位存到C[1]中。依此类推,即可求出C的所有位。
最后将C输出即可。
输入格式
输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。两个整数都不超过100位,两数的最高位都不是0。
输出格式
输出一行,表示a + b的值。
样例输入
20100122201001221234567890
2010012220100122
样例输出
20100122203011233454668012
还有点问题:
package testing_03;import java.util.Scanner;public class test_11 { public static void add(String str1,String str2){ int len1=str1.length(); int len2=str2.length(); str1 = new StringBuffer(str1).reverse().toString(); str2 = new StringBuffer(str2).reverse().toString(); int i=0,temp=0; int[] newNum=new int[20]; while(i<len1&&i<len2){ int a=Integer.parseInt(str1.toString().substring(i,i+1)); int b=Integer.parseInt(str2.toString().substring(i,i+1)); newNum[i]=temp+(a+b)%10; temp=(a+b)/10; i++; } if(len1==len2&&temp==1){newNum[i+1]=1;} if(i==len1&&i<len2){ newNum[i]=(temp+Integer.parseInt(str2.toString().substring(i,i+1)))%10; temp=(temp+Integer.parseInt(str2.toString().substring(i,i+1)))/10; i++; } if(i==len2&&i<len1){ newNum[i]=(temp+Integer.parseInt(str1.toString().substring(i,i+1)))%10; temp=(temp+Integer.parseInt(str1.toString().substring(i,i+1)))/10; i++; } int length=newNum.length; for(int j=length-1;j>=0;j--){ System.out.print(newNum[j]); } } public static void main(String[] args){ Scanner input=new Scanner(System.in); String str1=input.nextLine(); String str2=input.nextLine(); add(str1,str2); }}
package testing_03;public class test_011 { /** * 用字符串模拟两个大数相加 * @param n1 加数1 * @param n2 加数2 * @return 相加结果 */ public static String add2(String n1,String n2) { StringBuffer result = new StringBuffer(); //1、反转字符串 n1 = new StringBuffer(n1).reverse().toString(); n2 = new StringBuffer(n2).reverse().toString(); int len1 = n1.length(); int len2 = n1.length(); int maxLen = len1 > len2 ? len1 : len2; boolean nOverFlow = false; //是否越界 int nTakeOver = 0 ; //溢出数量 //2.把两个字符串补齐,即短字符串的高位用0补齐 if(len1 < len2) { for(int i = len1 ; i < len2 ; i++) { n1 += "0"; } } else if (len1 > len2) { for(int i = len2 ; i < len1 ; i++) { n2 += "0"; } } //3.把两个正整数相加,一位一位的加并加上进位 for(int i = 0 ; i < maxLen ; i++) { int nSum = Integer.parseInt(n1.charAt(i) +"") + Integer.parseInt(n2.charAt(i) +""); if(nSum >= 10) { if(i == (maxLen - 1)) { nOverFlow = true; } nTakeOver = 1; result.append(nSum - 10); } else { nTakeOver = 0; result.append(nSum); } } //如果溢出的话表示位增加了 if(nOverFlow) { result.append(nTakeOver); } return result.reverse().toString(); } public static void main(String[] args) { // TODO Auto-generated method stub String str = add2("9111234567879879","22287978987989"); System.out.println(str); }}
0 0
- 蓝桥杯BASIC_29(高精度加法)
- 蓝桥杯:高精度加法
- 蓝桥杯练习--高精度加法
- 蓝桥杯:高精度加法
- 蓝桥杯高精度加法
- 蓝桥杯 高精度加法
- 蓝桥杯-高精度加法
- 蓝桥杯BASIC29 高精度加法(数组 高精度)
- 蓝桥杯--高精度加法(vip)
- 蓝桥杯 基础练习 高精度加法
- 蓝桥杯基础练习 高精度加法
- 蓝桥杯基础练习 高精度加法
- 蓝桥杯 算法提高 高精度加法
- java蓝桥杯试题高精度加法
- 高精度加法
- 高精度加法
- 高精度加法
- 高精度加法
- SpringMVC中使用Interceptor拦截器
- leetcode-104. Maximum Depth of Binary Tree
- f:Tree
- ts打包代码详解 (ffmpeg)
- zabbix监控mongodb
- 蓝桥杯BASIC_29(高精度加法)
- 场景切换变暗问题
- 通讯录(数据结构)
- 哥德巴赫猜想
- 《从零开始学Swift》学习笔记(Day 64)——Cocoa Touch设计模式及应用之目标与动作
- 相机标定资源URL
- JavaScript 获取本月天数及其他常用方法
- 微信支付 第一次成功,其他无法调起,返回-1(Android eclipse 微信支付之大坑 签名工具问题)
- 蓝桥杯BASIC_30(阶乘计算)