首先要明确思路,如果两个数字的数字和等于他们和的数字和,那么就 每一位都不能出现进位的情况。那么我们开始枚举每一位的不进位的情况,最后乘一下,取模即可。
因为第 1 位不可以是 0 或者 9,所以在这不考虑这种情况,但第 2∼k−1 位要考虑。
A 数第 1 位可以取的数 | B 数第 1 位可以取的数 |
---|---|
1 | 1∼8 |
2 | 1∼7 |
3 | 1∼6 |
4 | 1∼5 |
5 | 1∼4 |
6 | 1∼3 |
7 | 1∼2 |
8 | 1 |
一共 (8+1)×8÷2=36 种选择。
同理 ,可以推出 2∼k−1 位的情况。
A 数第 2∼k−1 位可以取的数 | B 数第 2∼k−1 位可以取的数 |
---|---|
0 | 0∼9 |
1 | 0∼8 |
2 | 0∼7 |
3 | 0∼6 |
4 | 0∼5 |
5 | 0∼4 |
6 | 0∼3 |
7 | 0∼2 |
8 | 0∼1 |
9 | 0 |
共 (10+1)×10÷2=55 种。
那么,ans=36+(k−1)×55。
#include<bits/stdc++.h>
using namespace std;
int t,k,ans=0;
int main()
{
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
scanf("%d",&t);
while(t--)
{
ans=36;
scanf("%d",&k);
for(int i=1; i<k; i++)
ans=ans*55%10007;
printf("%d\n",ans);
}
return 0;
}