• (大数取模)Big Number hdu1212


    Big Number

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

    Total Submission(s): 9006    Accepted Submission(s): 6100

    Problem Description

    As we know, Big Number is always troublesome. But it's really important in our ACM. And today, your task is to write a program to calculate A mod B.

    To make the problem easier, I promise that B will be smaller than 100000.

    Is it too hard? No, I work it out in 10 minutes, and my program contains less than 25 lines.

    Input

    The input contains several test cases. Each test case consists of two positive integers A and B. The length of A will not exceed 1000, and B will be smaller than 100000. Process to the end of file.

    Output

    For each test case, you have to ouput the result of A mod B.

    Sample Input

    2 3

    12 7

    152455856554521 3250

    Sample Output

    2

    5

    1521

     

    (ABC)%n=(A*100%n+B*10%n+C%n)%n

    (A*B)%n=(A%n*B%n)%n

    于是,可以利用循环,对于挺大的数,利用字符串来表示这个数。

    比如,令ABC为字符串,则有

    1)sum=A%n;

    2)A%n*10+B%n=sum+B%n

    于是sum=(sum+B%n)%n

    3)经过循环,会有:

    sum=(sum+C%n)%n=((sum+B%n)%n*10+C%n)%n=((A%n*10+B%n)%n*10+C%n)%n=((A*100%n+B*10%n)%n+C%n)%n=(A*100%n+B*10%n+C%n)%n

    故而可以用循环求解。

    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    {
        string a;
        int b,len,sum;
        while(cin>>a>>b)
        {
            len=a.length();
            sum=0;
            for(int i=0;i<len;i++)
                sum=(sum*10+(a[i]-'0')%b)%b;
            cout<<sum<<endl;
        }
        return 0;
    }
    View Code

    用JAVA更简单

    import java.math.BigInteger;
    import java.util.Scanner;
    public class Main {
        public static void main(String[] args) {
            Scanner in = new Scanner (System.in);
            int n;
            BigInteger a,b;
            while(in.hasNextBigInteger()) {
                a=in.nextBigInteger();
                b=in.nextBigInteger();
                a=a.remainder(b);
                System.out.println(a);
            }
        }
    }
    View Code
  • 相关阅读:
    方法引用
    day2
    柯朗数(Courant number)研究
    Socket网络编程学习一
    自制导航
    HighChart 体验之旅 (后台传递JSON参数和数据的方法)
    HighChart体验之旅2 对HighChart控件的再次封装
    委托学习小计
    面试常用SQL整理
    动态LINQ(Lambda表达式)构建
  • 原文地址:https://www.cnblogs.com/Weixu-Liu/p/9165366.html
Copyright © 2020-2023  润新知