zoukankan      html  css  js  c++  java
  • A

    题目:

    演演是个厉害的数学家,他最近又迷上了数字谜。。。。

    他很好奇  xxx...xxx(n个x)*y 的答案中 有多少个z,x,y,z均为位数只有一位的整数。

    大概解释一下:

    22222*3 = 66666,里面有5个6。

    Input多组测试数据。 第一行有一个整数T,表示测试数据的数目。(1≤T≤5000) 接下来有T行,每一行表示一组测试数据,有4个整数x,y,z,n。 (1≤x,y≤9,0≤z≤9,1≤n≤10^9)Output对于每一组数据,输出一个整数占一行,表示答案。Sample Input

    2
    2 3 6 5
    3 3 0 10

    Sample Output

    5
    0
    可以发现乘出来的结果都是第一个数和最后那个数不同,中间的都相同;
    如果a*b<10,如果d等于a*b就输出n,否则输出0。如果a*b大于等于10,就找出循环数
    那个循环数就是x*y/10(即,进位)加上x*y%10(即,本位上的数),但是要注意这两个数相加可能会大于10
    就比如4*7,它的进位数是2,本位数是8(疏忽疏忽。。。。。。)

    代码:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<queue>
     6 #include<vector>
     7 using namespace std;
     8 const int INF=0x3f3f3f3f;
     9 const int maxn=3e5+10;
    10 const int mod=2015;
    11 typedef long long ll;
    12 int main()
    13 {
    14     ll t,x,y,z,n;
    15     scanf("%lld",&t);
    16     while(t--)
    17     {
    18         scanf("%lld%lld%lld%lld",&x,&y,&z,&n);
    19         ll index=0,sum=0,temp=0;
    20         if(x*y<10)
    21         {
    22             if(x*y==z)
    23                 printf("%lld
    ",n);
    24             else printf("0
    ");
    25         }
    26         else
    27         {
    28 
    29             int ans=x*y;
    30             temp=ans%10;
    31             ans/=10;
    32 
    33             if(n==1)
    34             {
    35                 if(ans==z)
    36                     sum++;
    37                 if(temp==z)
    38                     sum++;
    39                 printf("%lld
    ",sum);
    40             }
    41             else
    42             {
    43                 if(temp==z)
    44                     sum++;
    45                 if((ans+temp)%10==z)
    46                     sum++;
    47                 if((ans+temp+(ans+temp)/10)%10==z)
    48                     sum+=(n-2);//,printf("**
    ");
    49                 if(ans+(ans+temp+(ans+temp)/10)/10==z)
    50                     sum++;
    51                 printf("%lld
    ",sum);
    52             }
    53         }
    54     }
    55     return 0;
    56 }
  • 相关阅读:
    福大软工 · 第七次作业
    git分支重命名
    vscode左侧文件不同颜色标识含义
    正则表达式匹配指定字符区间的内容,且不包含指定字符
    git如何撤销工作区的修改
    git查看某个文件的提交历史
    扫盲篇--远程桌面连接
    git merge后如何撤销
    element-ui+vue-treeselect校验
    typeof 踩坑总结
  • 原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/12639334.html
Copyright © 2011-2022 走看看