Codeforces - 1107B. Digital root
题目
一个数 x
的数根的定义 S(x)
是如题目中给出的样子(就是一个数不断的将各个位上的数相加得到一个新的数(直到这个数为个位数)),现在给你两个数 k、x
,要你求出第 k
个数根是 x
的非负整数。
解析
想半天没有思路,其实是一道找规律的水题。。
先将前面的结果打表,求出每个数对应的数根,即可以发现规律:
- 是一个以
9
为周期的循环,每个周期的结果都是1 ~ 9
; - 于是很容易得到结果
(k- 1) * 9 + x
;
结果代码以及打表代码:
import java.io.*;
import java.util.*;
public class Main {
static long getSum(long p){
if(p == 0)
return 0;
return getSum(p/10) + p%10;
}
static long getRoot(long p){
if(p < 10)
return p;
return getRoot( getSum(p) );
}
static void test(){
// Bymeter
for(int i = 0; i < 100; i++)
System.out.println( i + " " + getRoot(i) );
}
public static void main(String[] args){
Scanner cin = new Scanner(new BufferedInputStream(System.in));
PrintStream out = System.out;
//test();
int n = cin.nextInt();
for(int i = 0; i < n; i++){
long k = cin.nextLong();
int x = cin.nextInt();
out.println( (k-1) * 9 + x);
}
}
}
题目链接
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: HTML 编码规范
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论