题目描述
会长不仅是个爱晨刷的girl,也特别喜欢数学呢。然而她已经不满足于高数线代这些简单玩意了,
她要自己定义一种运算改变世界!有一天她垂死梦中惊坐起,突然就想到了一种新的运算F(X)。
如F(123)=1*2+2*3+3*1=11。她发现对于所有的数字来说不停的运用 F 函数会进入一个循环,例如
F(123)=11,F(11)=2, F(2)=4 ,F(4)=16, F(16)=12 ,F(12)=4,循环节的大小就是3。
现在,我们定义 X 的循环节大小为 G(X) 。
现在会长要用自己的方法考验你,给你一个 X ,请你计算G(X)。
如果不知道循环节是什么,请看两个例子:
如果输入了4,你应该输出3
F(4)=16, F(16)=12 ,F(12)=4,F(4)=16... ...
F(4)=16, F(16)=12 ,F(12)=4 为循环节,所以循环节长度为3,即G(4)=3。
如果输入了123,你应该输出3
F(123)=11,F(11)=2, F(2)=4 ,F(4)=16, F(16)=12 ,F(12)=4,F(4)=16... ...
F(4)=16, F(16)=12 ,F(12)=4 为循环节,所以循环节长度为3,即G(123)=3。
输入
多组测试数据,每组测试数据输入一个整数x(x<=1000000)
输出
对于每组测试数据,输出一个整数,代表 G(x)。
样例输入
1
4
样例输出
1
3
#include <bits/stdc++.h> using namespace std; int seat[1000]; int main() { int x; while (~scanf ("%d", &x) ) { memset(seat,-1,sizeof(seat)); for(int i=0;;i++) { int t=-1; int ch[10]; memset(ch,0,sizeof(ch)); while (x) { t++; ch[t] = x % 10; x /= 10; } //将x按位存入ch[] int num=0; for(int i=0;i<t;i++) num+=ch[i]*ch[i+1]; num+=ch[0]*ch[t]; if(seat[num]!=-1) { printf("%d\n",i-seat[num]); break; } else //标记num的位置 { seat[num]=i; x=num; } } } return 0; }