大数运算,实在是懒的再手工写了。。直接上JAVA了
import java.math.BigInteger;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Main
{
static Set<String> all(String s)
{
Set<String> res = new HashSet<String>();
res.add(s);
int count = s.length() - 1;
for (int i = 0; i < count; i++)
{
String temp = s.substring(1) + s.charAt(0);
res.add(temp);
s = temp;
}
return res;
}
static String appendHeadZero(String s, int n)
{
StringBuilder sb = new StringBuilder(s);
while (sb.length() < n)
sb.insert(0, '0');
return sb.toString();
}
static boolean isCyclic(String s)
{
BigInteger src = new BigInteger(s);
Set<String> S = all(s);
int len = s.length();
for (int i = 1; i <= len; i++)
{
String mul = src.multiply(BigInteger.valueOf(i)).toString();
if (mul.length() > len)
return false;
else if (mul.length() < len)
mul = appendHeadZero(mul, len);
if (!S.contains(mul))
return false;
}
return true;
}
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String line;
while (sc.hasNext())
{
line = sc.nextLine().trim();
System.out.format("%s is%s cyclic\n", line, isCyclic(line) ? ""
: " not");
}
sc.close();
}
}