HDOJ-ACM1002(JAVA实现 自定义大数处理类MBigInteger)

转载声明:原文转自http://www.cnblogs.com/xiezie/p/5502809.html

JAVA语言实现:

import java.util.*;

import java.io.*;

public class Main{

    public static void main(String[] arg){
        Main m = new  Main();
        Scanner scan = new Scanner(new BufferedInputStream(System.in));
        int n = scan.nextInt();
        int l = n;
        while(n--!=0){
            MBigInteger integer = m.new MBigInteger(scan.next());
            MBigInteger integer2 = m.new MBigInteger(scan.next());
            System.out.println("Case " + (l-n) + ":");
            System.out.println(integer + " + " + integer2  +  " = " + integer.add(integer2));
            if(n!=0){
                System.out.println();
            }
        }
        scan.close();
    }

    class MBigInteger{

        private MBigInteger(){};

        private String s; 

        public MBigInteger(String s){
            this.setS(s);
        }

        public MBigInteger add(MBigInteger integer){//只处理正整数
            char[] ch1 = getS().toCharArray();
            char[] ch2 = integer.getS().toCharArray();
            int len = ch1.length;
            int len2 = ch2.length;
            int n = len;
            char[] resultChars;
            if(len<len2){
                n = len2;
            }
            resultChars = new char[ n ];
            boolean overTen = false;
            int ans;
            while(len!=0&&len2!= 0){
                int o = 0;
                if(overTen){
                    o++;
                }
                ans = getIntValueAt(ch1, len-1) + getIntValueAt(ch2, len2-1) + o;
                if(ans > 9){
                    overTen = true;
                }else{
                    overTen = false;
                }
                resultChars[--n] = (char) (ans%10 + ‘0‘);
                len -- ;
                len2 -- ;
            }
            while(len--!=0){
                int o = 0;
                if(overTen){
                    o++;
                }
                ans = getIntValueAt(ch1, len) + o;
                if(ans > 9){
                    overTen = true;
                }else{
                    overTen = false;
                }
                resultChars[--n] = (char) (ans%10 + ‘0‘);
            }
            while(len2--!=0){
                int o = 0 ;
                if(overTen){
                    o++;
                }
                ans = getIntValueAt(ch2, len2) + o;
                if(ans > 9){
                    overTen = true;
                }else{
                    overTen = false;
                }
                resultChars[--n] = (char) (ans%10 + ‘0‘);
            }
            if(overTen){
                setS("1".concat(String.valueOf(resultChars)));
            }else{
                setS(String.valueOf(resultChars));
            }
            return this;
        }

        @Override
        public String toString() {
            return this.getS();
        }

        public String getS() {
            return s;
        }

        public void setS(String s) {
            this.s = s;
        }

        public int getIntValueAt(char[] c,int i){
            return c[i]-‘0‘;
        }
    }

}
时间: 2024-10-13 00:02:33

HDOJ-ACM1002(JAVA实现 自定义大数处理类MBigInteger)的相关文章

Java中的大数处理类BigInteger和BigDecimar浅析

这两个类位于java.math包内,要使用它们必须在类前面引用该包:import java.math.BigInteger;和import java.math.BigDecimal; BigInteger和BigDecimal分别表示不可变的任意精度的整数和不可变的有符号的任意精度的十进制数(浮点数).主要用于高精度计算中.这两个类使得java中的大数,高精度运算变得很简单. 下面从几个方面对BigInteger和BigDecima做一个简单的比较: 一.常量 BigInteger:ONE,ZE

JAVA中的大数处理类

转自:http://ly5633.iteye.com/blog/1218724 ———————————————————————————————————————— 这两个类位于java.math包内,要使用它们必须在类前面引用该包:import java.math.BigInteger;和import java.math.BigDecimal; BigInteger和BigDecimal分别表示不可变的任意精度的整数和不可变的有符号的任意精度的十进制数(浮点数).主要用于高精度计算中.这两个类使得

Java 实现自定义链表

Java 实现自定义链表节点类 Node.java操作功能类 Link.javaApp.java节点类 Node.javapublic class Node {/ 当前节点的数据*/private String data;/* 如果当前节点是首/尾节点 NULL 或者是 下一个节点的实例/private Node next;public Node(final String data) {this.data = data;}public void setNext(final Node next)

基于数组实现Java 自定义Stack栈类及应用

栈是存放对象的一种特殊容器,在插入与删除对象时,这种结构遵循后进先出( Last-in-first-out,LIFO)的原则.java本身是有自带Stack类包,为了达到学习目的已经更好深入了解stack栈,自己动手自建java stack类是个很好的学习开始: 自建Java Stack 类 Stack 类: 1 package com.stack; 2 3 import java.util.ArrayList; 4 import java.util.Arrays; 5 6 /** 7 * St

JAVA之IO技术-自定义的LineNumberReader类

package ioTest.io2; /* * 自定义一个带有读取行号方法的读取文件的装饰类 */ import java.io.FileReader; import java.io.IOException; import java.io.Reader; public class MyLineNumberReaderDemo { public static void main(String[] args) throws IOException { String line; //创建输入流-读取

Java 自定义Stack栈类及应用

栈是存放对象的一种特殊容器,在插入与删除对象时,这种结构遵循后进先出( Last-in-first-out,LIFO)的原则.java本身是有自带Stack类包,为了达到学习目的已经更好深入了解stack栈,自己动手自建java stack类是个很好的学习开始: 自建Java Stack 类 Stack 类: package com.stack; import java.util.ArrayList; import java.util.Arrays; /** * Stack Class * @a

java学习--基础知识进阶第十三天--反射机制的概述和字节码对象的获取方式、反射操作构造方法、成员方法、成员属性、JavaBean的概述&amp;BeanUtils的使用、自定义BeanUtils工具类

今日内容介绍 u 反射机制的概述和字节码对象的获取方式 u 反射操作构造方法.成员方法.成员属性 u JavaBean的概述&BeanUtils的使用 u 自定义BeanUtils工具类 第1章 反射机制概述.字节码对象的获取方式.反射操作构造方法.成员方法.成员属性 1.1 反射机制的概述和字节码对象的获取方式 1.1.1 反射介绍 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法        这种动态获取的以及动

mybatis自定义枚举转换类

mybatis提供了 EnumTypeHandler和EnumOrdinalTypeHandler完成枚举类型的转换,两者的功能已经基本满足了日常的使用.但是可能有这 样的需求:由于某种原因,我们不想使用枚举的name和ordinal作为数据存储字段.mybatis的自定义转换类出现了. 示例 使用一段代码,将枚举类EnumStatus中的code属性存储到数据库对应字段statusCustom. 自定义转换类 package com.sg.util.typehandler; import ja

Java jsp 自定义标签

1 自定义标签 1.1 引入 需求: 向浏览器输出当前客户的IP地址 (只能使用jsp标签) 1.2 第一个自定义标签开发步骤 1)编写一个普通的java类,继承SimpleTagSupport类,叫标签处理器类 /** * 标签处理器类 * @author APPle * 1)继承SimpleTagSupport * */ public class ShowIpTag extends SimpleTagSupport{ private JspContext context; /** * 传入p