solution.cpp 2.2 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
#include <iostream>
#define MAX_N 1005
using namespace std;

bool judge1(int n) //判断两个数的乘积是否为4位数
{
    int ans = 0;
    while (n)
    {
        ans++;
        n /= 10;
    }
    if (ans == 4)
        return true;
    return false;
}

bool judge2(int i, int j) //判断乘积的数是否为原来的四个数
{
    int s1 = 0, s2 = 0;   //和
    int ss1 = 1, ss2 = 1; //积
    int tmp = i * j;
    bool flag1 = true, flag2 = true;
    while (tmp)
    {
        s1 += tmp % 10;
        if (tmp % 10 == 0)
            flag1 = false;
        else
            ss1 *= tmp % 10;
        tmp /= 10;
    }
    while (j)
    {
        s2 += j % 10;
        if (j % 10 != 0)
            ss2 *= j % 10;
        else
            flag2 = false;
        j /= 10;
    }
    while (i)
    {
        s2 += i % 10;
        if (i % 10 != 0)
            ss2 *= i % 10;
        else
            flag2 = false;
        i /= 10;
    }
    if (s1 == s2 && ss1 == ss2 && flag1 && flag2) //如果没有0的话,是否乘积和和都相等
        return true;
    else if ((!flag1 && !flag2) && s1 == s2 && ss1 == ss2) //如果有0的话,是否乘积都相等
        return true;
    return false;
}

bool judge3(int i, int j) //判断两个数中是否全是不同的数
{
    int a[4];
    int ans = 0;
    while (i)
    {
        a[ans] = i % 10;
        i /= 10;
        ans++;
    }
    while (j)
    {
        a[ans] = j % 10;
        j /= 10;
        ans++;
    }
    for (i = 0; i < 3; i++)
    {
        for (j = i + 1; j < 4; j++)
            if (a[i] == a[j]) //如果有相等的话返回false
                return false;
    }
    return true;
}

int main()
{
    //freopen("data.txt","r",stdin);
    int i, j;
    int ans = 0;
    for (i = 1; i < 10; i++)
    { //一位数乘以三位数
        for (j = 123; j < 1000; j++)
        {
            if (judge1(i * j) && judge2(i, j) && judge3(i, j))
                ans++;
        }
    }
    for (i = 10; i < 100; i++)
    { //两位数乘以两位数
        for (j = i + 1; j < 100; j++)
        {
            if (judge1(i * j) && judge2(i, j) && judge3(i, j))
                ans++;
        }
    }
    cout << ans;
    return 0;
}