(大数取模)Big Numberhdu1212

mac2022-06-30  105

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

 

转载于:https://www.cnblogs.com/Weixu-Liu/p/9165366.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)