/*
大整数取模:
输入正整数n和m,输出n mod m 的值。n <= 10^100,m<=10^9
分析:
把大整数写成自左向右的形式:
1234=[(1*10 + 2)*10 + 3 ]*10 + 4,每步取模
输入:
1234567890123456789 100000000
输出:
23456789
*/
/*
关键:
1 iSum = (int)(((long long)iSum * 10 + str[i] - '0') % m);//注意由于n很大,保存iSum*10需要用long long保存,m<=10^9决定了取模后的结果不会超过int
iSum * 10这样做是保存了之前的部分和,适用于从高位向低位的处理
*/
#include <stdio.h>
const int MAXSIZE = 100 + 10;
int bigIntegerMod(char* str,int m)
{
int iSum = 0 ;
for(int i = 0 ; str[i] != '\0'; i++)
{
iSum = (int)(((long long)iSum * 10 + str[i] - '0') % m);//注意由于n很大,保存iSum*10需要用long long保存,m<=10^9决定了取模后的结果不会超过int
}
return iSum;
}
void process()
{
char n[MAXSIZE];
int m;
while(EOF != scanf("%s %d",n,&m))
{
printf("%d\n",bigIntegerMod(n,m));
}
}
int main(int argc,char* argv[])
{
process();
getchar();
return 0;
}
算法竞赛入门经典:第十章 数学概念与方法 10.4大整数取模
最新推荐文章于 2020-09-07 14:45:01 发布