这个题目是群里贴出来的的,只有图片,题目如下:
解题思路:
很明显,这个题目如果直接计算11的n次方的值的话肯定不行,因为n的取值范围是0到1000,在C语言中即使用unsigned long也存储不了这么大的结果。
要解决这个问题,还是要从11这个数本身的特点入手。
我最开始的想法是展开(10+1)^n,然后从这个展开的式子中找到解题方法,但是展开的结果表示这个路子走不通,展开的结果中要计算阶乘,还要计算加法,这样的式子对解题来说没有帮助。
后来,就感觉这个每次乘以11的的结果比较特别,类似杨辉三角似的,所以在纸上开始手动计算11相乘的结果,发现了一个规律:假设现在的值为p(十进制表示),p乘以11的结果就是最低位仍为1,其他位都是p的相邻的两个数逐步相加的结果,当然最高位要做一下特殊处理,拿p的最高位加上进位(有可能两个数字相加的结果大于等于10),如下所示: