用C计算完全日期的个数:
什么是完全日期?如果一个日期中年月日的各位数字之和是完全平方数(n*n(n>=0)),那么这个日期完全日期。
让我们写一段代码,实现从一个年份到另一个年份的完全日期个数的计算。
在开始之前,让我们谈谈二维数组:二维数组是一维数组的数组,它的每一个元素其实是一个一维数组。这对后面要写的代码非常重要。
首先,我们可以创建y m d分别代表的是year,month,day,同时准备好开始的年份y1与结束的年份y2,并为y1 y2赋值。此外,为了判断闰年并根据它来计数我们需要创建一个包含两个一维数组的二维数组和变量leap;为了判断完全平方数并为它计数我们需要准备好
变量num、count、i(num=i * i)。
随后我们就可以写一个for循环,因为要实现y1受y2限制的自增。
紧接着我们判断闰年,因为闰年的二月比平年的二月多1天,不考虑是否为闰年会带来计数的误差。
最后我们可以写下三层循环来实现完全日期的判断。
为了把一个日期中年月日的各位数字加起来赋给num,我们在外层循环让m++,在中层循环让d++。
让我们仔细观察二维数组,可以发现,二维数组的两个元素其实是两组月份的天数,分别代表的是平年中每个月份的天数和闰年中每个月份的天数。每当程序从外层循环运行到中层循环,月份的天数都是不一定相同的。我们可以发现d的自增正是受限于这些天数,配合着闰年的判断,我们就有办法让一个日期中年月日的各位数字相加并赋值给sum。需要注意的是,如果我们让一个数字/10,那么得到的就是去掉最后一位数字的这个数字;如果我们让一个数字%10,那么得到的就是这个数字的最后一位数字。其中数字“10”的“0”与最后一位的一相对应,如果把“10”换成“100”,有两个“0”,那么就是最后两位数字了。以此类推:
于是我们进入内层循环,把得到的已经完成赋值的sum拿出来判断,如果可以找到一个i能做到i * i == sum,就count++。
最后把它打印出来。
下面是最终完整的代码: