统计一下 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
System Message
(题目提供者)
C++的运行时限为:1000 ms ,空间限制为:262144 KB
示例及语言说明请按这里
晚上回宿舍之前
只剩十几分钟
打算随便挑一道水题切掉
结果想倒是想出来了
但是策略稍微有点错误。。
结果还是看了一下题解
难受。。。
我只考虑了最后一位,最高位,和中间的其他位
结果除了乘法的进位外
还有加法的进位
所以倒数第二位也是要考虑的
结合这个就可以看出来了:6666*8=53328
另外注意一下这些位一样的情况就可以了
难受。。
#include<stdio.h>
#include<cstring>
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int a,b,d,n;
scanf("%d %d %d %d",&a,&b,&d,&n);
if(a*b<10)
{
if(d==a*b) printf("%d\n",n);
else printf("0\n");
}
else
{
if(n==1)
{
int ans=a*b;
int sum=0;
if(d==ans/10) sum++;
if(d==ans%10) sum++;
printf("%d\n",sum);
}
else
{
int ans=(a*100+a*10+a)*b;
int sum=0;
if(d==ans/1000) sum++;
if(d==ans%10) sum++;
if(d==ans%100/10) sum++;
if(d==ans%1000/100) sum+=n-2;
printf("%d\n",sum);
}
}
}
return 0;
}