神犇营-my1036-大数取模

版权声明:本文为博主原创文章,未经博主允许不得转载。如需转载,请与博主联系。 https://blog.csdn.net/qq_31790997/article/details/88910586

【小韦同学@神犇营-my1036-大数取模】

题目:

描述

你需要实现一个程序,计算一个整数 A 对一个整数 B 取模的结果。

输入

第一行读入一个整数 T(1 ≤ T ≤ 100),表示一共要计算多少次取模。
接下来一共 T 行,每行两个正整数 A、B,A 为不超过 200 位的整数,1 ≤ B ≤ 10^8。

输出

一行输出 T 行,每行一个整数表示 A mod B 的结果。

输入样例1

2
100 7
98765 11

输出样例1

2
7

题解:

/********************************************************************* 

* 题目:神犇营-my1036-大数取模
* 作者:小韦同学 
* 邮箱:[email protected] 

* 题解:
	思路:
	如果一个数 A = a_n a_(n-1)...a_3 a_2 a_1 a_0,这个数可以表示为:
	A = a_0 * 10^0 + a_1 * 10^1 + a_2 * 10^2 + a_3 * 10^3 +...+ a_n^n
	根据同余定理,得出下面的结论: 
	(a + b) % m == (a % m + b % m) % m
	(a * b) % m == ((a % m) * (b % m)) % m
	故A % m ==  ((a_0 * 10^0) % m + (a_1 * 10^1) % m + (a_2 * 10^2) % m + 
	(a_3 * 10^3) % m +...+ (a_n * 10^n) % m) % m
	本题中,将字符串num用来存大数,从低位取每一个数字,乘以对应的幂次之后
	加到ans中,用ans来存大数转成的数字,不过在每次加到ans之后,要模m,避免
	溢出的情况。 
	
*********************************************************************/ 

#include <bits/stdc++.h>
using namespace std;

int main() {
    //freopen("5.in", "r", stdin);
    //freopen("5.out", "w", stdout);
	string num;
	int t, b;
    cin >> t;
    while (t--) {
    	long long ans = 0;
        cin >> num >> b;
        for (int i = 0; i < num.length(); i++) {
            ans = ans * 10 + num[i] - '0';
            ans %= b;
        }
        cout << ans << endl;
    }
    
    return 0;
}

我是小韦同学,企者不立,跨者不行,每天进步一点点。
欢迎大家多多交流,如果发现有错误,请多指正。有疑问的同学也可以留言评论或者发邮件。
邮箱:[email protected]

猜你喜欢

转载自blog.csdn.net/qq_31790997/article/details/88910586