统计一下 aaa ⋯ aaan个a × b 的结果里面有多少个数字d,a,b,d均为一位数。
样例解释:
3333333333*3=9999999999,里面有10个9。
Input
多组测试数据。 第一行有一个整数T,表示测试数据的数目。(1≤T≤5000) 接下来有T行,每一行表示一组测试数据,有4个整数a,b,d,n。 (1≤a,b≤9,0≤d≤9,1≤n≤10^9)
Output
对于每一组数据,输出一个整数占一行,表示答案。
Input示例
2 3 3 9 10 3 3 0 10
Output示例
10 0
觉得是个模拟题 暴力 了 思路: 如果 n<6 直接求出 直接算 我们发现 如果 a*b>=10 算出的数 的个数 总是比 n 大 1 当大于6 的时候 我们只计数6 个 a *b的值
计算出符合 数的数量 这里我们需要注意 sum == 1 , 0 2 的时候直接输出 剩下的 情况 就是 n+1 减去 前面 数的数量 + 符合题意的数的数量
这个 sum ==2 输出 是因为 第一个和 第二个 相等 比如 8 7 6 361 这个数据 取6 个8 622216 收尾相等的情况
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int a,b,d,n;
cin>>a>>b>>d>>n;
int sum=0,s=0,num=0;
int m=n;
if(m<6){
int k=0;
for(int j=0;j<n;j++){
k=k*10+a;
}
k=k*b;
//if(a*b>=10) n=n+1;
while(k){
int z=k%10;
if(z==d){
sum++;
}
k=k/10;
}
cout<<sum<<endl;
}
else{
if(a*b>=10) n=n+1;
for(int j=0;j<6;j++){
s=s*10+a;
}
s=s*b;
int head=s%10;
int e=s;
while(s){
num++;
int z=s%10;
if(z==d){
sum++;
}
if(s<10&&s>0) e=s;
s=s/10;
}
// long long i=pow(10,sum);
// e=e%i;
//cout<<head<<" "<<e<<endl;
if(sum==1||sum==0||sum==2){
cout<<sum<<endl;
}
else{
// cout<<num<<" "<<sum<<endl;
//if(head==e){
// cout<<sum<<endl;
//}
//else
cout<<n-num+sum<<endl;
}
}
}
return 0;
} ///8 7 6 361 6 1 6 111 8 8 1 395 3 4 3 35