• A + B Problem II


    原创


    HDOJ:http://acm.hdu.edu.cn/showproblem.php?pid=1002

      长度在1000以内的两个数相加是不可能直接相加的,我用的是模拟手工相加的方法,比如:1111+11,由于n位数相加最多只能

    得到n+1位,所以可以写成01111+00011,这样考虑进位会方便一些,用户输出字符串,将字符串转换成字符数组,然后逐个将字符

    数组的字符数字转换成int型考虑相加,相加以后再转换成char存放,过程涉及很多字符串String、StringBuilder、char、int的

    相互转换,弄得头都大,输出格式注意一下就没多大问题了,以下是自己写的Accepted代码:

     1 import java.util.*;
     2 
     3 public class HDOJ_1002 {
     4 
     5     public static void main(String[] args) {
     6         Scanner reader=new Scanner(System.in);
     7         int N=reader.nextInt();
     8         String Result[]=new String[N];    //存储N个结果字符串
     9         int count=0;
    10         String s1[]=new String[N];
    11         String s2[]=new String[N];
    12         while(N>0) {
    13             s1[count]=reader.next();
    14             s2[count]=reader.next();
    15             StringBuilder str1=new StringBuilder(s1[count]);
    16             StringBuilder str2=new StringBuilder(s2[count]);
    17             //首部加0
    18             if(str1.length()>str2.length()) {
    19                 str1.insert(0,'0');
    20                 int differ=str1.length()-str2.length();
    21                 while(differ>0) {
    22                     str2.insert(0,'0');
    23                     differ--;
    24                 }
    25             }
    26             else {
    27                 str2.insert(0,'0');
    28                 int differ=str2.length()-str1.length();
    29                 while(differ>0) {
    30                     str1.insert(0,'0');
    31                     differ--;
    32                 }
    33             }
    34             String sss1=new String(str1);
    35             String sss2=new String(str2);
    36             char ss1[]=sss1.toCharArray();
    37             char ss2[]=sss2.toCharArray();
    38             //存储结果的字符数组的大小定义为max+1,因为两个n位数相加最多得到n+1位数字
    39             int max=ss1.length;
    40             char result[]=new char[max];
    41             int index_ss1=ss1.length-1;    //ss1数组最后一位元素的索引
    42             int index_ss2=ss2.length-1;    //ss2数组最后一位元素的索引
    43             int index_res=result.length-1;    //结果数组索引
    44             int flag=0;    //进位标志
    45             while( (index_ss1>=0 && index_ss2>=0) || flag==1){
    46                 if( index_ss1<0 && index_ss2<0 && flag==1 ) {
    47                     result[index_res]='1';
    48                     break;
    49                 }
    50                 int tra1=ss1[index_ss1]-'0';
    51                 int tra2=ss2[index_ss2]-'0';
    52                 int res_tra;
    53                 if(flag==1) {    //后面有进位
    54                     res_tra=tra1+tra2+1;
    55                     flag=0;    //勿忘
    56                 }
    57                 else {
    58                     res_tra=tra1+tra2;
    59                 }
    60                 if(res_tra>=10) {    //有进位
    61                     res_tra-=10;
    62                     flag=1;
    63                 }
    64                 result[index_res]=(char)(res_tra+48);
    65                 index_ss1--;
    66                 index_ss2--;
    67                 index_res--;
    68             }
    69             if(result[0]=='0') {
    70                 String ss=new String(result);
    71                 StringBuilder sss=new StringBuilder(ss);
    72                 sss.deleteCharAt(0);
    73                 ss=new String(sss);
    74                 Result[count]=new String(ss);
    75             }
    76             else {
    77                 Result[count]=String.valueOf(result);
    78             }
    79             N--;
    80             count++;
    81         }
    82         for(int i=0;i<count;i++) {
    83             System.out.println("Case "+(i+1)+":");
    84             System.out.println(s1[i]+" "+"+"+" "+s2[i]+" "+"="+" "+Result[i]);
    85             if(i<count-1) {
    86                 System.out.println();
    87             }
    88         }
    89     }
    90 
    91 }

    19:45:00

    2018-08-16

  • 相关阅读:
    Spring 事务全解析
    oracle trigger pl/sql
    reflection
    JAXP(Java API XML Parser)
    log4j扩展后的Appender
    Hibernate sql查询
    tt,mongodb主从启动命令
    4种挂隐藏链接的代码
    Delphi过程函数传递参数的几种方式
    学校Win7 KMS激活服务器已经可以用了
  • 原文地址:https://www.cnblogs.com/chiweiming/p/9489411.html
Copyright © 2020-2023  润新知