所谓金字塔数,又称走马灯数,也就是142857这个数字,它发现于金字塔内。 它的神奇之处在于:
142857 × 1 = 142857 142857 × 2 = 285714 142857 × 3 = 428571 142857 × 4 = 571428 142857 × 5 = 714285 142857 × 6 = 857142 142857 × 7 = 999999 142857 × 8 = 1142856 142857 × 9 = 1285713 142857 × 10 = 1428570 ……
仔细观察所得结果,你会发现所得结果的所有位之和都为27或者27的倍数,而且结果都是由1,4,2,8,5,7或者这五个数字分解组成的(每到星期天,9来代班)。 例如: 142857×9=1285713,1285713由1,2,8,5,7,(1+3)组成,所有位之和为27。 更进一步,2+7=9; 142857×6=857142; 2+7=9; 142857×7=999999; 9×6=54,5+4=9 … 那么问题来了,是不是142857这个金字塔数无论乘多少,所得结果的所有位累加和都满足这种情况呢?
定义一个变量Result=142857*n,由用户输入n(n为任意整数),循环分解出result的每一位,并对每一位进行求和sum,如果sum大于9继续分解,最终判断得到的结果是否为9。
由问题分析得,该问题可以分为三个模块: - 分解函数,功能是将得到的数字分解成每一位,并保存在数组内 - 求和函数 - main函数,负责调用函数,输出结果
分解函数:
void resolve(int Num[],int n,int result){ if(result>0){ Num[i++]=result%10; Num[i]=-1; resolve(Num,n,result/10); } else i=0; }求和函数:
int Sum(int[] Num,int n){ int sum=0; while(Num[i]!=-1) sum+=Num[i++]; return sum; }这里,如果单是做这个题的话已经到这已经结束了,但是如果输入的数非常大了,该怎么解决呢? 大数问题在下一篇。