基础循环数 模拟

Posted w53064

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础循环数 模拟相关的知识,希望对你有一定的参考价值。

1096: 【基础】循环数【模拟】

时间限制: 1 Sec  内存限制: 128 MB
提交: 426  解决: 283
[
提交][状态][讨论版]

题目描述

描述

n 位的一个整数是循环数(cyclic)的条件是:当用一个 1 n 之间的整数去乘它时, 会得到一个将原来的数首尾相接循环移动若干数字再在某处断开而得到的数字。也就是说,如果把原来的数字和新的数字都首尾相接,他们得到的环是相同的。只是两个数的起始数字不一定相同。例如,数字 142857 是循环数,因为
142857 *1 = 142857 
142857 *2 = 285714 
142857 *3 = 428571 
142857 *4 = 571428 
142857 *5 = 714285 
142857 *6 = 857142 

输入

输入

写一个程序确定给定的数是否是循环数。输入包括多个长度为 2 位到 60 位的整数。(注意,先导的0也是合理的输入不应该被忽略,例如 "01" 2 位数,"1" 1 位数。)

输出

输出

对于每一个输入的整数,输出一行表明它是否是循环数。

样例输入

142857

142856

142858

01

0588235294117647

样例输出

142857 is cyclic

142856 is not cyclic

142858 is not cyclic

01 is not cyclic

0588235294117647 is cyclic

 

 

思路:将一开始输入的数转变为字符串,获取其位数n之后,在n次循环的乘积里面,将每个乘积结果都转变为字符串并与之相比较,若有不同,则将控制判断的flag设为false并跳出循环,输出"非循环数"的结果。否则输出"循环数"的结果。

 

代码:
package com.eangaie.main;

 

import java.util.*;

 

public class M1096 {

 

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        Scanner in = new Scanner(System.in);

        String s,str, str1;

        long num;

        int n;// 位数

        char[] arr, arr1;

        String a=" is cyclic",b=" is not cyclic";

        boolean flag;// 用来判断是否为循环数

        while (in.hasNext()) {

            flag = true;

            s = in.next();

            str=s;

            num = new Long(str);

            n = str.length();// 获取str的长度(位数)

            arr = str.toCharArray();

            Arrays.sort(arr);

            str = fn(arr);// 获得从小排到大的字符串

            for (int i = 2; i <= n; i++) {

                num *= i;

                str1 = String.valueOf(num);// 把乘积再转化为字符串

                arr1 = str1.toCharArray();

                Arrays.sort(arr1);

                str1 = fn(arr1);

                num /= i;

                if (!str1.equals(str)) {// 若相乘后的数所有的位数没有全部等于原来的所有位数,则不是循环数

                    flag = false;

                    break;

                }

 

            }

 

            if (flag) {

                System.out.println(s+a);

            } else {

                System.out.println(s+b);

            }

 

        }

    }

 

    static String fn(char[] arr) {

        String s = "";

        for (char c : arr) {

            s += c + "";

        }

        return s;

    }

}

以上是关于基础循环数 模拟的主要内容,如果未能解决你的问题,请参考以下文章

Python语言基础练习题

python基础练习-循环

C#基础第三天-作业答案-集合-冒泡排序-模拟名片

python基础:条件语句与循环语句

JavaScript基础——for循环小案例

Java基础项目(模拟双色球抽奖系统)