40分,请指出问题 必关
查看原帖
40分,请指出问题 必关
1760855
liujiacheng2012楼主2025/8/29 11:05

真诚推荐IDE : “啊哈C++ 3.0” 真的超级好用 评测记录 : https://www.luogu.com.cn/record/233665185

#include <iostream>
#include <cstring>
using namespace std;
int get_digit_sum(int p)
{
    int s = 0;
    while(p != 0)
    {
        s += p % 10;
        p /= 10;
    }
    return s;
}   //返回各位数字和
int change(int x)   //对一个数字进行变化
{
    x *= 7; //将数字乘以7
    if (x <= 9)
    {
        return x;   //若不大于9,则作为变换结果
    }
    else {
        int xx = get_digit_sum(x);  //否则把结果的各位数相加
        if (xx <= 9)//若结果不大于9
        {
            return xx;  //则作为变换结果
        }
        else{
            while(1)   //否则继续把各位数相加 直到结果不大于9
            {
                xx = get_digit_sum(xx);
                if (xx <= 9)
                {
                    return xx;
                }
            }
        }
    }
}
int main()
{
    int n;
    cin >> n;
    for (int temp = 0;temp < n;temp++)
    {
        char num1[20];
        int num[20];
        cin >> num1;
        int len = strlen(num1);
        for (int i=0;i<len;i++)
        {
            num[i] = num1[i] - '0'; //转成整数数组 
        }
        for (int i=0;i<len;i++)
        {
            if (i % 2 == 0) //对于 0-based来说 奇数位相当于 1-based 的偶数位
            {
                num[i] = change(num[i]); //对奇数位的数字进行变换
            }
        }
        int s = 0 ;
        for (int i=0;i<len;i++)
        {
            s += num[i];    //将变换结束后的数字的个数为相加
        }
        if (s % 8 == 0) //如果得到的和是 8 的 倍数
        {
            cout << "T" << endl;    //Yes
        }
        else cout << "F" << endl;  //No
    }
    return 0;
}

谢大佬

2025/8/29 11:05
加载中...