数字一共会有三种状态:
1:两数相乘没有进位,则只会出现一种情况,如:3333*3 = 9999
2:两数相乘有进位,但是进位和下一个乘积相加没有进位,如 9999*9=89991
3:两数相乘有进位,且进位和下一个乘积相加有进位,如8888*6 = 53328
那么分三种情况各自讨论就好了。
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int main(){
int T;
scanf("%d",&T);
while(T--){
int a,b;
int d,n;
scanf("%d%d%d%d",&a,&b,&d,&n);
if(a*b<=9){ //第一种
if(d==a*b){
printf("%d\n",n);
}
else{
printf("0\n");
}
}
else{
int t = a*b;
if(t%10 + t/10<10){ //第二种
int ans = 0;
if(d==t%10) ans++;
if(n>1&&d==t%10 + t/10) ans += n-1;
if(d==t/10) ans++;
printf("%d\n",ans);
}
else{ //第三种
int ans = 0;
int t = 0;
for(int i=0;i<3&&i<n;i++){ //注意要小于n,n有可能不大于三
t = t*10 + a;
}
t = t*b;
int tt = t;
while(tt){
if(d==tt%10) ans++;
tt/=10;
}
if(t>=1000){
t/=100;
t = t%10;
if(t==d){
ans += (n-3); //若进入这里,要减去之前已经算上的那个重复数字,所以为n-3
}
}
printf("%d\n",ans);
}
}
}
return 0;
}