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 }

 

posted @ 2016-08-17 12:43  马丁黄瓜啊  阅读(320)  评论(0编辑  收藏  举报