综合实践一题多解试题 第四题 七(五)班 吴飞潼
8的倍数 【问题描述】判断数是否8的整数倍。是“YES”,否“NO” 【输入样例1】 84 【输出样例1】 NO 【输入样例2】 1234567890123456 【输出样例2】 YES 【数据范围】 30% n<=10的19次方 100% 0<n<=10 的1000次方
呵呵。。。。。。 突然有点饿
算法分析 扫一眼,最先想到的是:输入n, 判断n mod 8是否等于0,=0 输出 ‘Yes’, 否则输出‘No’。
方法一 --- 最easy方法 var n:longint; begin read(n); if n mod 8=0 then write('Yes') else write('No'); if n=0 then write('No'); end. 这个程序有没有问题呢?
var n:int64;(因为数据规模太太太太太辣) begin read(n); if n mod 8=0 then write('Yes') else write('No'); if n=0 then write('No'); end.
数学算法分析 若一个数后三位是8的倍数,这个数就是8的倍数
数学算法 var a,b,c:longint; n:int64; begin read(n); a:=n div 100; //分离百位 b:=(n div 10) mod 10; //分离十位 c:=n mod 10; //分离个位 if (100*a+10*b+c) mod 8=0 then write(‘Yes’) else write(‘No’); //判断 end.
方法三 把数当做字符串读入,再把后三位分离,并转换为数字,最后判断。
程序 var s:string; a,b,c,l:longint; begin readln(s); l:=length(s); a:=ord(s[l])-48; b:=ord(s[l-1])-48; c:=ord(s[l-2])48; if (a+10*b+100*c) mod 8=0 then write('Yes') else write('No'); end.
The End The End
Thank you! Goodbye and good luck.