Presentation is loading. Please wait.

Presentation is loading. Please wait.

解题报告 刘非.

Similar presentations


Presentation on theme: "解题报告 刘非."— Presentation transcript:

1 解题报告 刘非

2 题目: 判断数是否8的整数倍。是“YES”,否“NO”

3 不是很简单吗? var var n:longint n:longint; begin begin read(n); read(n);
if n mod 8=0 then writeln(“YES') 或 n:=n mod 1000; else writeln('NO'); if n mod 8 =0 then writeln('YES') end else writeln('NO'); end.

4 看似很简单,再看一看数据范围: 30% n<=10的19次方 100% 0<n<=10 的1000次方!! 这种做法肯定会爆………… 难道不能把变量的数据类型改一下吗? 我们来看两张表:

5

6

7 整形数据范围最大qword,范围是0~2^64-1;
而数据范围是30% n<=10的19次方 100% 0<n<=10 的1000次方…………肯定会爆…… 实行数据范围最大extended,范围是 1.9*10^-4951~1.1*10^4932 ,有效位数是19-20位 数据范围是30% n<=10的19次方 100% 0<n<=10 的1000次方 一样会爆…………

8 以上几种算法,虽然不能过大数据,但不超过20位的小数据还是能过的。
有没有其他算法呢?

9 分析: 首先,我们可以写几个数: 2333 可以发现:除了第三个数以外,其他数不能被8除尽

10 深入分析 八能被1000整除,那么一个数后三位如果都是0的话,这个数必能被8整除。这样的话,我们可以将一个n位数abc……def分为(abc……*1000+def),所以我们只要看 def能否被8除尽就可以了。简单来说,只要知道一个数 能否被8整除,只要看它后三位能否被8整除就行了。

11 程序首部 var n,b:ansistring;//n是输入的字符串,b是转换的字符串 i,s,k:longint;
code:longint;//字符串过程要用到 begin read(n);

12 程序主部 b:=copy(n,length(n)-2,3);//用一个字符串函数提取n的后三位字符串
val(b,s,code);//用过程将字符串b变为数字s if s mod 8=0 then write('YES') else write('NO'); end.

13 总结 这种题目主要考察字符串的运用,我们还要多学一些字符串函数与过程,掌握并熟悉他们,这样程序就简单多了。以后的字符串学习我们还要继续努力,多多练习,才能争取取得更高的成就。

14 谢谢观赏!


Download ppt "解题报告 刘非."

Similar presentations


Ads by Google