(大数取模)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

猜你喜欢

转载自www.cnblogs.com/Weixu-Liu/p/9165366.html
今日推荐