巴啦啦不亮


私信TA

用户名:dotcpp0648134

访问量:272

签 名:

等  级
排  名 22264
经  验 656
参赛次数 0
文章发表 5
年  龄 0
在职情况 学生
学  校 某某学院
专  业

  自我简介:

解题思路:思路就是题里的思路,一直减,然后除17

我就是直接模拟题里的要求,尽管会很麻烦,但是我觉得还是挺好的

注意事项:

参考代码:

#include<stdio.h>
#include<string.h>
/*
这个题的意思应该是判断一个数是不是17的倍数,但是这个数会很大,所以题目里给了方法,
就是这个数减去自己的个位数,因为一个数是17的倍数,然后这个数(没了个位)减去个位数乘5,
要是也是17的倍数,那么原先的数也是17的倍数
*/
char shu[20][120] = { '\0' };
int result[20] = { 0 };
void Fun(char* shu, int i);
int Pan(char* shu);
int main()
{
    int n = 0;
    int f = 0;
    int i = 0;
    int j = 0;
    f = scanf("%s", shu[i]);
    f = getchar();
    while (shu[i][0] != '0')
    {
        i++;
        f = scanf("%s", shu[i]);
        f = getchar();

    }
    n = i;
    for (i = 0; i < n; i++)
    {
        result[i] = Pan(shu[i]);
    }

    for (i = 0; i < n; i++)
    {
        printf("%d\n", result[i]);
    }

    return 0;
}
int Pan(char* shu)
{
    
    //不是十位数
    while (strlen(shu) > 2)
    {
        char ge_char = shu[strlen(shu) - 1];//提取个位数
        shu[strlen(shu) - 1] = '\0';//把个位去掉
        ge_char= ge_char - '0';//变一下
        int ge = ge_char;//现在的个位数是整形
        int cheng = ge * 5;//乘完5的乘积
        //把乘完的结果的个位和十位拿出来
        char cheng_ge = cheng % 10 + '0';//再把整形转换为字符
        char cheng_shi = cheng / 10 + '0';
        //判断个位
        if (cheng_ge <= shu[strlen(shu) - 1])//个位小于要判断的数的个位,直接减就行
        {
            shu[strlen(shu) - 1] = shu[strlen(shu) - 1] - cheng_ge + '0';//别忘了加‘0’,再转化为字符型
        }
        else//否则就要借一
        {
            /*   507 - 9的情况
            */
            if (shu[strlen(shu) - 2] == '0')//就是十位不够借,就再向上借
            {
                Fun(shu, strlen(shu) - 2);//当前的数组,然后当前不够借的index
                //借完了
                /*以507-9举例子,就是变成了17-9*/
                char c1 = shu[strlen(shu) - 1] - '0';//7
                int c2_ = 1;//数字1
                int c1_ = c1;//数字7
                int he = c2_ * 10 + c1_;//就是17
                char c3 = cheng_ge - '0';//就是9
                int c3_ = c3;//数字9
                int cha = he - c3_;//相当于17-9 ,cha等于8
                char cha_ = cha + '0';//字符8
                shu[strlen(shu) - 1] = cha_;//把减完的字符再放数组里
            }
            else//十位够借
            {
                shu[strlen(shu) - 2] = shu[strlen(shu) - 2] - 1 ;//十位已经减去一了
                char c1 = shu[strlen(shu) - 1] - '0';//7
                int c2_ = 1;
                int c1_ = c1;

                int he = c2_ * 10 + c1_;
                char c3 = cheng_ge - '0';
                int c3_ = c3;
                int cha = he - c3_;
                char cha_ = cha + '0';
                shu[strlen(shu) - 1] = cha_;
            }

        }
        //判断十位
        if (cheng_shi <= shu[strlen(shu) - 2])//十位小于要判断的数的十位,直接减就行
        {
            shu[strlen(shu) - 2] = shu[strlen(shu) - 2] - cheng_shi + '0';//别忘了加‘0’,再转化为字符型
        }
        else//否则就要借一
        {
            
            if (shu[strlen(shu) - 3] == '0')//就是百位不够借,就再向上借
            {
                Fun(shu, strlen(shu) - 3);//当前的数组,然后当前不够借的index
                //借完了
                /*以5070-90举例子,就是变成了170-90*///后面的0就可以忽略了
                char c1 = shu[strlen(shu) - 2] - '0';//7
                int c2_ = 1;//数字1
                int c1_ = c1;//数字7
                int he = c2_ * 10 + c1_;//就是17
                char c3 = cheng_shi - '0';//就是9
                int c3_ = c3;//数字9
                int cha = he - c3_;//相当于17-9 ,cha等于8
                char cha_ = cha + '0';//字符8
                shu[strlen(shu) - 2] = cha_;//把减完的字符再放数组里
            }
            else//十位够借
            {
                shu[strlen(shu) - 3] = shu[strlen(shu) - 3] - 1 ;//十位已经减去一了
                char c1 = shu[strlen(shu) - 2] - '0';//7
                int c2_ = 1;
                int c1_ = c1;
                int he = c2_ * 10 + c1_;
                char c3 = cheng_shi - '0';
                int c3_ = c3;
                int cha = he - c3_;
                char cha_ = cha + '0';
                shu[strlen(shu) - 2] = cha_;
            }

        }
        //已经减完了


        

    }

    if (strlen(shu) <= 2)//要是数组里的字符个数小于等于2,就是一个十位数,可以直接进行判断
    {
        int sum = 0;

        sum += (shu[0] - '0') * 10;
        sum += (shu[1] - '0') * 1;
        if (sum % 17 == 0)
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }


}

void Fun(char* shu,int i)//十位不够,再往上借,所以现在shu[i]就代表要借的那个位
{
    if (shu[i] == '0')//要是传进来的那个数是0,就要往上一位去借
    {
        Fun(shu, i - 1);
        shu[i] = '9';
    }
    //直到够借了为止
    else
    {
        shu[i] = shu[i] - 1;
    }
}
 

0.0分

3 人评分

  评论区

超了超了
2023-05-31 21:22:45
!!!不亮giegie竟然上新了!!!不亮giegie太厉害了!!!
2023-05-31 21:21:30
  • «
  • 1
  • »