华为机试测试- 大数相加

方法一:

直接使用BigDecimal

方法二:字符串解析,注意stringBuilder.append(int x)这里的x最终会变成x字符串,而不是对应的char.

 1 import java.math.BigDecimal;
 2 import java.util.Scanner;
 3
 4
 5 public class Main {
 6     public static void main(String[] args) {
 7         Scanner scanner=new Scanner(System.in);
 8         String t1=scanner.next();
 9         String t2=scanner.next();
10         System.out.println(getStr(t1, t2));
11         scanner.close();
12     }
13
14     public static String getStr(String a,String b)
15     {
16         int l=a.length();
17         int s=b.length();
18         String longString=l>s?a:b;
19         String shortString=l<=s?a:b;
20         l=longString.length();
21         s=shortString.length();
22         longString=new StringBuilder(longString).reverse().toString();
23         shortString=new StringBuilder(shortString).reverse().toString();
24         StringBuilder stringBuilder=new StringBuilder();
25         boolean carry=false;
26         for(int i=0;i<s;i++)
27         {
28             char cl=longString.charAt(i);
29             char cs=shortString.charAt(i);
30             int il=cl-‘0‘;
31             int is=cs-‘0‘;
32             int nx=il+is+(carry?1:0);
33             if(nx>9)
34             {
35                 carry=true;
36                 stringBuilder.append((char)(‘0‘+nx-10));
37             }
38             else {
39                 carry=false;
40                 stringBuilder.append((char)(‘0‘+nx));
41             }
42         }
43         if(s==l && carry)
44         {
45             stringBuilder.append(‘1‘);
46             return stringBuilder.toString();
47         }
48         String str=longString.substring(s,l);
49         for(int i=0;i<str.length();i++)
50         {
51             char c=str.charAt(i);
52             int nx=c-‘0‘+(carry?1:0);
53             if(nx>9)
54             {
55                 carry=true;
56                 stringBuilder.append((char)(‘0‘+nx-10));
57             }
58             else {
59                 carry=false;
60                 stringBuilder.append((char)(‘0‘+nx));
61             }
62         }
63         if(carry)
64             stringBuilder.append(‘1‘);
65         return stringBuilder.reverse().toString();
66     }
67 }
时间: 2024-10-06 14:12:59

华为机试测试- 大数相加的相关文章

华为机试测试- 字符串最长的数字串

输入 输入一个字符串. 输出 输出字符串中最长的数字字符串和它的长度. 如果数字字符串为空,则只输出0 如 input: dadfsaf  output:0 样例输入 abcd12345ed125ss123058789 样例输出 123058789,9 import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; public class Main { p

华为机试测试-

验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和. 例如: 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19 1 import java.util.Scanner; 2 3 4 public class Main { 5 public static void main(String[] args) { 6 Scanner scanner=new Scanner(System.in); 7 int n=scanner.nextInt(); 8 S

华为机试测试-矩阵乘法-循环

1 import java.util.Scanner; 2 public class Main{ 3 public static void main(String[] args){ 4 Scanner scanner=new Scanner(System.in); 5 int row=scanner.nextInt(); 6 int len=scanner.nextInt(); 7 int column=scanner.nextInt(); 8 int [][] x1=new int[row][

华为机试测试- 最小公倍数

import java.util.*; /*求最大公约数和最小公倍数*/ public class MaxCommonDivisorAndMinCommonMultiple { public static void main(String[] args) { Scanner scan = new Scanner(System.in);// 接收控制台输入的信息 System.out.print("请输入第一个整数:"); int num1 = scan.nextInt(); // 取出

华为机试测试- 质数因子

根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积. import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); Lo

华为机试测试-找偶数的相距最近的素数对

1 import java.util.Scanner; 2 public class Main{ 3 public static void main(String[] args){ 4 Scanner scanner=new Scanner(System.in); 5 int n=scanner.nextInt(); 6 for(int i=n/2;i>=2;i--) 7 { 8 if(isSushu(i) && isSushu(n-i)) 9 { 10 System.out.pri

华为机试测试- 求有序数组中最长的等差序列

原题目是求一个无序数组中最长的等差数列. 求随机数构成的数组中找到长度大于=3 的最长的等差数列, 输出等差数列由小到大:如果没有符合条件的就输出格式:输入[1,3,0,5,-1,6]输出[-1,1,3,5] 思路: 1.排序 2.d的取值范围是[0,max-min],共有max-min+1种情况 3.对每一种情况进行查找 4.对于公差d,要求最长的等差序列,需要两个循环,一个外循环从头到尾遍历,内循环从外循环的起始遍历点开始利用公式 arr[i]=arr[start]+len*d,假如符合就长

华为机试测试-分苹果-递归

import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner scanner=new Scanner(System.in); int m=scanner.nextInt(); int n=scanner.nextInt(); System.out.println(sharingApple(m, n)); scanner.close(); } public static in

华为机试测试-dna-字符串

一个DNA序列由A/C/G/T四个字母的排列组合组成.G和C的比例(定义为GC-Ratio)是序列中G和C两个字母的总的出现次数除以总的字母数目(也就是序列长度).在基因工程中,这个比例非常重要.因为高的GC-Ratio可能是基因的起始点. 给定一个很长的DNA序列,以及要求的最小子序列长度,研究人员经常会需要在其中找出GC-Ratio最高的子序列. 输入 输入一个string型基因序列,和int型子串的长度 输出 找出GC比例最高的字串 样例输入 AACTGTGCACGACCTGA 5 样例输