51nod 1170 1770 数数字(动态规划)

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:

 #include<stdio.h>
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<=)
{
printf("%d\n",a*b%==d?n:);
}
else
{
int ans=;
if(n!=)
{
int k=(a*+a*+a)*b;
if(k%==d)ans++;
if(k/%==d)ans++;
if(k/%==d)ans+=n-;
if(k/==d)ans++; }
else
{
if(a*b%==d||a*b/==d)ans++;
}
printf("%d\n",ans);
}
}
return ;
}
上一篇:java关于输入输出流的问题


下一篇:用goto做异常处理