题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=4485
题目意思:
给一个B进制的数,求这个数模(B-1)的值。
解题思路:
由于给定的数很大,肯定不能直接来搞。
记给定的数,从个位到最高位依次为a0,a1,a2,a3,a4,.....an.
转化成十进制的数为a0*B^0+a1*B+a2*B^2+a3*B^3+...+an*B^n 记为K,题目也即求K%(B-1)
构造数P=a0+a1+a2+...+an 则K-P=0+a1*(B-1)+a2*(B^2-1)+a3*(B^3-1)+...+an*(B^n-1) 显然(K-P)%(B-1)=0 所以记K-P=m*(B-1) 则K=P+m*(B-1) 所以K%(B-1)=P%(B-1).
代码:
#include <iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<cstdlib> #include<cctype> #include<map> #include<set> #include<queue> #include<vector> using namespace std; const double eps = 1e-5; const double PI = acos(-1.0); typedef __int64 ll; //char save[11000000]; int main() { int t; scanf("%d",&t); while(t--) { int d,b; scanf("%d%d",&d,&b); b--; char c; while(isspace(c=getchar())); ll ans=c-'0'; while(!isspace(c=getchar())) ans=(ans+c-'0'); printf("%d %I64d ",d,ans%b); } }