110,539
社区成员
发帖
与我相关
我的任务
分享
static void Main(string[] args)
{
int y = 0;
//for (int z = 1; z <120; z++)
//{
// if(z%2==0 && z%3!=0)
// {
// if (gm.cacut(z) == 0)
// {
Console.WriteLine(cacut(488,ref y)); //测试488
// }
// }
//}
Console.ReadLine();
}
public static int cacut(int n, ref int xy)
{
int y = xy;//用来计算输入的数计算的步数
int mm = 0;
int gw;//个位
int sw;//十位
int bw;//百位
int qw;//千位
int ww;//万位
int len = 1;//判断长度
len = n.ToString().Length;//得到输入的数字长度
switch (len)
{
case 1: gw = n;
if (n % 2 == 0) //如果是偶数(下同)
{
n = gw * gw;
}
else//奇数(下同)
{
n = gw * gw * gw;
}
break;
case 2: gw = n % 10; sw = n / 10;
if (n % 2 == 0)
{
n = (sw + gw) * (sw + gw);
}
else
{
n = (sw + gw) * (sw + gw) * (sw + gw);
}
break;
case 3: bw = n / 100; sw = (n / 10) % 10; gw = n % 10;
if (n % 2 == 0)
{
n = (bw + sw + gw) * (bw + sw + gw);
}
else
{
n = (bw + sw + gw) * (bw + sw + gw) * (bw + sw + gw);
}
break;
case 4: qw = n / 1000; bw = (n / 100) % 10; sw = (n / 10) % 10; gw = n % 10;
if (n % 2 == 0)
{
n = (qw + bw + sw + gw) * (qw + bw + sw + gw);
}
else
{
n = (qw + bw + sw + gw) * (qw + bw + sw + gw) * (qw + bw + sw + gw);
}
break;
case 5: ww = n / 10000; qw = (n / 1000) % 10; bw = (n / 100) % 10; sw = (n / 10) % 10; gw = n % 10;
if (n % 2 == 0)
{
n = (ww + qw + bw + sw + gw) * (ww + qw + bw + sw + gw);
}
else
{
n = (ww + qw + bw + sw + gw) * (ww + qw + bw + sw + gw) * (ww + qw + bw + sw + gw);
}
break;
}
if (n != 1)
{
++y;//如果不等于1就让其加1,统计步数
mm = cacut(n, ref y);//递归
Console.WriteLine(y);//这里输出8正常,因为当等于1的时候y就不在加了
}
return mm;
}
static void Main(string[] args)
{
//for (int z = 1; z <1000; z++)
// {
// if(z%2==0 && z%3!=0)
// {
// if (cacut(z) > 9)
// {
// Console.WriteLine("这个数字就不行:" + z);
// }
// else
// {
// Console.WriteLine("这个虽然成立:" + z+"但不知道一个更大的数行不行?");
// }
// }
// }
int z=89765556;
if (cacut(89765556) > 9)
{
Console.WriteLine("这个数字就不行:" +z);
}
Console.ReadLine();
}
private static int cacut(int n)
{
int step = 0;
int result=n;
while (step < 10 && result>1)
{
int newshu = sum(result);
if (result % 2 == 0)
{
result = newshu * newshu;
}
else
{
result = newshu * newshu * newshu;
}
step++;
}
return step;
}
private static int sum(int xy)
{
int sum = 0;
while (xy >= 10)
{
sum += xy % 10;
xy = xy / 10;
}
return sum + xy;
}
}