问题描述:
输入正整数n和m,输出n mod m的值。
问题分析:根据n和m的取值范围,可以取n为char*类型,m为int类型。首先mod运算具有如下性质:
需要注意的是,有可能小于0,所以要先加n。而
当n=时,
中间结果会溢出,所以计算时应该先强制类型转换为long long 型。
对于输入的n,把大整数写成“自左向右”的形式:1234=((1*10+2)*10)*10+4,然后用上面的公式,每步取模。
程序实现可以如下:
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int main()
{
char n[105];
int m;
scanf("%s%d",n,&m);
int len = strlen(n);
int ans = 0;
for (int i = 0; i < len; i++)
ans = (int)((((long long)ans * 10) % m + (n[i] - '0') % m) % m);
printf("%d\n",ans);
system("pause)");
return 0;
}
但由于每次加的数最大也就是9,所以一般情况下都不会溢出,所以可以把ans = (int)((((long long)ans * 10) % m + (n[i] - '0') % m) % m);
改为ans = (int)(((long long)ans * 10 + n[i] - '0') % m);