Java算法题

题目描述

定义S(n),表示n在十进制下的各位数字之和。现在给定一个x,请你求出最小正整数n,满足x<=S(n).

输入描述

第一行数据组数T,对于每组数据,一行一个数字x。1<= x <= 10^5,1<= T <=10

输出描述

对于每组数据,一行一个整数表示最小的n

Java算法题_第1张图片

解题思路

每个数位上的数最大到9,所以就是看9的个数。
比如 28 = 3 x 9 +1,结果就是1999
26 = 2 x 9 +8,结果就是899

代码如下

import java.util.Scanner;

/*
 * 定义S(n),表示n在十进制下的各位数字之和。现在给定一个x,请你求出最小正整数n,满足x<=S(n).
 */
public class Exercise3 {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int T = in.nextInt();
		for (int i = 0; i < T; i++) {
			int x = in.nextInt();
			solution(x);
		}
	}

	public static void solution(int x) {
		int n = x / 9;
		int h = x % 9;
		int i = 0;
		String result = "";
		for (i = 0; i < n; i++) {
			result = result + "9";
		}
		if (h != 0) {
			result = h + result;
		}
		System.out.println(result);
	}
}

输入

2
26
28

输出

899
1999

Java算法题_第2张图片
注意:这里之所以用字符串,是因为,如果用 int 或者 long ,当x大一点比如100时,会超出int 或long 的范围。

你可能感兴趣的:(Java算法题,算法)