#4214. 幸运数(23-6四级)
幸运数(23-6四级)
幸运数
【问题描述】
- 变化正整数的各个奇数位(从右到左,个位为第1位,奇数,16347),变化的规 则是乘以7,如果该奇数位与7相乘的结果大于9则各位数相加,如相加结果仍然 大于9则继续各位数相加,直到结果不大于9;如果该奇数位与7相乘的结果不大 于9则该数为该奇数位变化结果。
- 偶数位不发生变化。
- 各个奇数位变化完毕后,将 新数的各位数相加,如果相加之和是8的整数倍,则为幸运数;
- 例如16347,第1位7奇数位,乘以7结果为49,大于9各位数相加为13大于9 继续各位数相加最后结果为4;然后变化第3位3,第5位1。
- 最后变化结果为76344, 对于结果76344其各位数之和为24,是8的倍数,为幸运数;
- 首先输入N,随后输入N行正整数
- 。输出N行,对应N个正整数是否为幸运数, 如是则输出T否则F。
【输入描述】
- 首先输入正整数N随后输入N行正整数,每个一个数。不考虑输入不合规情形,负
数、负整数、非数字构成的字符串等。特别提示:常规程序中,输入时好习惯是有提示。考试时由于系统限定,输入时所 |
有input**()**函数不可有提示信息。
【输出描述】
- 输出N行,对应N个正整数是否为幸运数,如是则输出T否则F。;2. 特别提示:注意输出字母为英文大写,小写或其他将判为错误。
【样例输入1】
2
16347
76344
【样例输出1】
T
F
【解析】
本题考察数位拆分运算和循环的综合应用,首先接收N作为循环次数, 在循环内写输入,分别接收N个数到M中,接收到之后,在当次循环内就处理并输出。 在一次循环内tnt用于存储当前M的数位相加之和,最后判断是否为8的倍数, 决定输出结果,loc为处于M的第几位,首先是偶数位很好理解,因为偶数位不需要任何操作,走else直接取出个位,累加在tnt中。 如果是奇数位则需要判断*7之后是否大于9,如果大于9就一直用while做个位+十位操作,直到不大于9为止,然后也累加到tnt中,最后将M的个位去除掉,loc继+1,检测后面的数位,直到将当前的M的各位累加完成,输出对应的T或者F,然后开始执行下一次for循环,直至将所有数字都判断完,分别输出是否为幸运数。
Limitation
1s, 1024KiB for each test case.