Description
对一个整数来说,它的余数有一些有趣的求解方法,例如:
(1) 正整数n除3的余数,等价于,正整数n的各位数字之和除3的余数;
(2) 正整数n除9的余数,可以通过这样的方法来计算:计算n 的各位数之和,设为m,如果m已经是一位数,那么余数就是m;否则设n=m,重新进行计算n的各位数之和m,直到m是一个一位数。但是,正整数除1,2,4,5,6,7,8,也存在类似的性质吗?
现在请你计算一下正整数n除一位数m的余数。文件中有一些数对,第一个为大整数n(可能大到100位),另一个为一位数m(0<m<=9)。求其n除以m的余数。
Input
Output
Sample Input
23 7
123 9
Sample Output
2
6
HINT
测试样例中会有一些非常大的整数,(可能会超出Integer的表示范围)。
本题运用到了一个简单的数论知识:同余定理:(a+b)%c=a%c+b%c
可以利用这点循环解决问题。
#include <iostream>
#include <string>
using namespace std;
int solve(string a, int b)
{
if (b == 1)
{
return 0;
}
else if (b == 2)
{
if (a[a.length() - 1] == '0' || a[a.length() - 1] == '2' || a[a.length() - 1] == '4' || a[a.length() - 1] == '6' || a[a.length() - 1] == '8')
return 0;
else
return 1;
}
else
{
int k = 0;
for (int i = 0; i < a.length(); i++)
{
k = k * 10 + a[i] - '0';
k %= b;
}
return k;
}
}
int main()
{
string a;
int b;
while (cin >> a >> b)
{
cout << solve(a, b) << endl;
}
}