能被 7 整除吗?
时间限制:1000ms 内存限制:65535KB
题目描述
hwjj 最近知道了一个惊人的秘密:原来一个位数大于 2 位的数字 x 能否被 7 整除取决于其十位及之前的数字减去两倍的个位数能否被 7 整除,比如说: 378→37-2×8=21=3×7 所以 378 能被 7 整除。 hwjj 激动极了,他让你赶紧写个程序来算一算那些很大的数能不能被7整除。 现已知规则:如果有一个 N (N≥3) 位的数字 m=10x+y (0≤y<10),若 x-2y 能够被 7 整除,那么原数字就能被 7 整除,例如: 1603→160-2×3=154→15-2×4=7 (需要两步操作) 372→37-2×2=33 (需要一步操作) 1603 能够被 7 整除,而 372 不行。 假设一个小于 100 的数能否被 7 整除可以直接判断(一步操作完成),现给出这样一个大于等于100 的数字,请你判断需要几步以上操作才能判断出它能否被 7 整除。
输入
输入共一行,为一个整数x (x≥100) 。
输出
输出共两行。 第1行为两个整数M,T,用一个空格隔开;M代表最后一步操作后的数字,T代表操作的次数。 第2行为一个字符串,输出Yes代表x能被7整除,否则输出No。
输入样例1
1021
输出样例1
10 2
No
输入样例2
371
输出样例2
35 1
Yes
样例解释
1. 1021→102-2×1=100→10-2×0=10 最终需要 2 步操作,最后的数字为 10,不能被7整除。 2. 371→37-2×1=35 最终需要 1 步操作,最后的数字为 35,能被7整除。
实验指导:
1. 你既可以把数字转化为字符串通过切片来取出数字,也可以使用数学操作来取出最
后一位和十位之前的数字;
2. 可以采用while语句实现本题。需要考虑循环条件表达式是什么,以及在循环体中原
数字的变化如何描述
注意我这里这个函数定义的妙用
# 定义的一个函数 js (参数),能够计算其十位及之前的数字减去两倍的个位数
def js(x):
y=str(x)
a=eval(y[0:-1]);b=eval(y[-1])
x1=a-2*b
return x1
cishu=0
# 输入一个数字
shuzi=eval(input())
# 对数字进行判断,如果大于 100 ,则会进行函数 js 操作,如果小于 100 就会直接判断输出
while shuzi>=100:
shuzi=js(shuzi)
cishu+=1#
统计步骤
if shuzi<100:
break
# 下面是对最终数字是否整数 7 进行判断,
if shuzi%7==0:
print(shuzi,cishu)
print("Yes")
else:
print(shuzi,cishu)
print("No")
def f7(x):
m=x//10
n=x%10
z=m-2*n
return z
N=int(input())
i=0
while (N>=100):
N=f7(N)
i=i+1
if N%7==0:
print(N,i)
print("Yes")
else:
print(N,i)
print("No")