您的位置:首页 > 其它

sicily 1020. Big Interger 有数学公式

2014-04-18 11:32 281 查看
//大数取模,模为整型,运用到数学公式



式1表示一个数,式2是关于10^n mod c 的递推公式。对于式3,赋值前,k是前面10^(n-1)数量级的和取模的结果,每步进行递推,最后即可得到结果。另外需要记录一个变量专门存储10^n mod c的值

#include <cstdio>
#include <iostream>
#include <string>

using namespace std;

int mod[100];

int bigIntMod(string num, int mod)
{
int result = (num[num.size() - 1] - '0') % mod ,
result10 = 1 % mod;
for (int i = num.size() - 2; i >= 0; i--){
result10 = ((10 % mod) * (result10 % mod) ) % mod;
result = ( result + ((num[i] - '0') % mod * (result10 % mod) ) % mod ) % mod;
}
return result;
}

int main()
{
int testCase;
scanf("%d",&testCase);
while ( testCase-- ){
int numCount;
scanf("%d",&numCount);
for ( int i = 0 ; i < numCount; i++){
scanf("%d",&mod[i]);
}
string num;
cin >> num;
printf("(%d",bigIntMod(num,mod[0]));
for ( int i = 1 ; i < numCount; i++)
printf(",%d",bigIntMod(num,mod[i]));
printf(")\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sicily 大数取模