【题解】大数取模
【题目描述】
求m%n。
【输入描述】
两个数,m和n。
【输出描述】
m模n的值。
【样例输入】
3
【样例输出】
2
【数据范围】
对于30%的数据, 1<m<10^18
对于70%的数据, m>10^18
【题目分析】
题目描述非常简单,去m模n即可,但是从数据范围上看并不简单,题目的数据范围明显超过long long。所以,这个题目考虑用高精度的思想配合数论的知识进行求解
使用高精度,用字符数组进行计算,那么转化用 a[i]-'0',所以数组的每一个a[i]只放一个数。
用到了数论里的知识 (a+b)%p =(a%b + b%p) % p
假如1234是用高精度表示,那么这四个数字单独存在数组中,那么(1 2 3 4)%n 等价于 (1000 + 200+30+4)%n
上面的知识我们拆分开就是:(1000 %n + 200 %n + 30%n +4 %n)%n。那么,基础代码就是 : ans*10+s[i]-'0'
【参考代码】
#include<bits/stdc++.h> using namespace std; int main() { int n; char m[1000]; cin>>m; cin>>n; int ans=0; for(int i=0; m[i]!='\0'; i++) { int temp= (m[i]-'0'); ans=((ans*10)%n + temp %n)%n; } cout<<ans%n; return 0; }
(adsbygoogle = window.adsbygoogle || []).push({});