引言
输入格式:
输入在一行中给出一个不以5结尾的正奇数x(<1000)。
输出格式:
在一行中输出相应的最小的s和n,其间以1个空格分隔。
输入样例:
31
输出样例:
3584229390681 15
解题思路
由于数目过大,考虑使用java里的BigInteger类进行操作,定义一个变量字符串s,每次循环都加“1”,即“1”,“11”,“111”…
每次循环将s变成BigInteger的类型与x进行取余操作,若为0,答案就出来了。
代码部分
import java.util.*;
import java.beans.beancontext.BeanContext;
import java.io.*;
import java.math.BigInteger;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BigInteger x = new BigInteger(br.readLine());
BigInteger ans;
String t = "1";
while(true) {
BigInteger i = new BigInteger(t);
if(i.mod(x).toString().equals("0")) {
ans = i.divide(x);
break;
}
t+="1";
}
System.out.println(ans.toString()+" "+t.length());
br.close();
}
}
过程记录
我最初是用x与一个不断自增1的变量进行乘法然后看结果是否符合要求,若符合就为正确答案,结果都超时,但是我还是记录下我用来判断一个字符串是否都为1的函数,这里利用了正则表达式。
if(isGg(ans)) {
System.out.println("Yes");
}else {
System.out.println("No");
}
//判断是否都为1
static boolean isGg(BigInteger ans) {
String str = "^1*";
return ans.toString().matches(str);
}