资源描述
,目录,退出,目录,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,案例五 196回文数猜想的验证,本案例知识要点,字符数组的使用,字符串函数的使用,一、案例需求,案例描述,上一案例中提出了对特殊数字“196”的回文数猜想验证的编程实现思想。这里给出具体的实现方法。,案例效果图,196回文数猜想案例效果如图所示。,17 709次,241 388次,功能说明,程序开始运行后,用户输入数字196。,程序进行计算,计算完成后给出已经计算的次数和运算结果。,根据运算结果,给出在一定范围内是否存在回文数的结论。,二、案例分析,上一案例中使用了long型数据存储回文数的计算结果,笔者所使用的计算机是32位机,当运算结果超出32位机的最大计数范围2 147 483 647后,会出现错误的计算结果,因此上例只能运算到第17步,无法继续验证数字196是否能推出一个回文数。据报道:有人已经计算数字196达到50 000步以上,还是没有回文数出现。本案例采用字符数组存储数据,克服了long型数据容量的限制缺点,即将原数、逆序数和累加和分别存放在3个不同的字符数组num1Max、num2Max和sumMax中,num1数组中的数与num2数组中的数的顺序刚好相反,运算时使相应位相加即可。在sum数组中存放num1和num2之和,当然还要考虑进位标志cf,然后将sum数组赋给num1数组,重复以上步骤进行计算。,三、案例设计,函数的设计,根据上述的设计思想,本案例中设计了5个函数,包括“整型转换成字符型函数”、“回文数比较函数”、“两数相加函数”、“数组调整函数”和“计算长度函数”。,整型转换成字符型函数,inttochar (),回文数比较函数cmp(),定义类型为布尔型的函数,cmp(),。,两数相加函数,add(),定义类型为void型的无参函数,add(),。,数组调整函数,adjust(),定义类型为void型的无参函数,adjust(),。,计算长度函数,int length(),定义类型为整型的无参函数,length(),。,主程序设计,主程序结构如图所示。,四、案例实现,五、案例总结与提高,案例总结,在本案例的具体设计和实现过程中,使用了字符数组进行处理,最早字符数组num1内为有效数字在前,后面全部为“0”,如:“19600000”格式,但为了计算相加后的进位,需要调整为“00000196”格式,adjust()函数的作用就在于此。,进位的相加使用了ASCII值,例如9的ASCII为十进制数57,请参看add()函数。,虽然字符串函数中有strlen()函数,可以计算字符数组的有效长度,但这只是对于“19600000”格式有效,而对于“00000196”则不能使用,需要重新编制length()函数进行统计。,判断是否为回文数,使用了折半比较算法。,案例提高,本算法可以进行任意数量级的计算,程序结果显示进行了字长为100 000的计算,计算次数达到241 388次,仍没有为196找到回文数,有兴趣的读者可以修改Max值,进行更大次数的计算。,
展开阅读全文