题目描述
会长不仅是个爱晨刷的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;
}