51nod 1170 1770 数数字(数学技巧)
解题思路:
看到题后,直接想到分成两种情况:
①:a*b >9
这里又分成两种
1. n==1 a*b 直接是一个两位数 求得十位和个位(这里十位和个位不可能相等) 然后如果等于d 则结果=1
2. n>1
直接分析 a*b aa*b aaa*b aaaa*b的结果
6 * 8 = 48
66 * 8 = 528
666 * 8 = 5328
6666 * 8 =53328
...... * 8 = 5....328
所以可以看出结果
只需求出 个位 十位 百位 和最高位即可
②:a*b <=9
判定 a*b 是否 == d 即可
不等于 ans=0
等于 ans=n
Ac code:
1 #include<stdio.h> 2 int main() 3 { 4 int t; 5 scanf("%d",&t); 6 while(t--) 7 { 8 int a,b,d,n; 9 scanf("%d%d%d%d",&a,&b,&d,&n); 10 if(a*b<=9) 11 { 12 printf("%d\n",a*b%10==d?n:0); 13 } 14 else 15 { 16 int ans=0; 17 if(n!=1) 18 { 19 int k=(a*100+a*10+a)*b; 20 if(k%10==d)ans++; 21 if(k/10%10==d)ans++; 22 if(k/100%10==d)ans+=n-2; 23 if(k/1000==d)ans++; 24 25 } 26 else 27 { 28 if(a*b%10==d||a*b/10==d)ans++; 29 } 30 printf("%d\n",ans); 31 } 32 } 33 return 0; 34 }