定义,表示在十进制下的各位数字和。
现在给定一个,请你求出最小正整数,满足.
import java.util.Scanner; public class Main{ public static void main(String args[]){ Scanner in = new Scanner(System.in); int length = in.nextInt(); for(int i=0;i<length;i++){ System.out.println(s(in.nextInt())); } } public static String s(int x){ StringBuilder builder = new StringBuilder(); while(x-9>0){ builder.append("9"); x-=9; } String result = String.valueOf(x)+builder.toString(); return result; } }
var n = parseInt(readline()) var arr = [] while(n > 0){ var tmp = parseInt(readline()) arr.push(tmp) n-- } function foo(arr){ var res = [] for(var i = 0;i < arr.length;i++){ var k = Math.floor(arr[i]/9) // 计算9有多少位,13/9 = 1 18/9=2 24/9=2 var k1 = arr[i] % 9 // 最小数位和肯定是将余数放在最高位,其他位都是9 var str = '' if(k1!==0){ str+=`${k1}` } for(var j = 0;j < k;j++){ str+='9' } res.push(str) // 49 99 699 } return res } var res = foo(arr) for(var i = 0; i< res.length;i++){ console.log(res[i]) }
import java.util.Scanner; /** * @author Mr.Zhao * @version 1.0 * @Description: * @date 2020/1/5 10:48 */ public class Test01 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int i = scanner.nextInt(); int[] arr = new int[i]; for (int i1 = 0; i1 < i; i1++) { int j = scanner.nextInt(); arr[i1] = j; } for (int i1 = 0; i1 < arr.length; i1++) { int k = arr[i1] / 9; int k1 = arr[i1] % 9; StringBuilder stringBuilder = new StringBuilder(); if (k1 != 0) { stringBuilder.append(k1); } for (int i2 = 0; i2 < k; i2++) { stringBuilder.append(9); } System.out.println(stringBuilder); } } }
//位数之和等于x,且高位到低位非递减,这个数得最小 let len=parseInt(readline()) for(let i=0;i<len;i++){ let num=parseInt(readline()) //判断几位数 let bit=Math.ceil(num/9) //一位数直接返回 if(bit===1){ console.log(num) continue } //多位数则除了首位,末位一定都是9 let first=num-(bit-1)*9 let last="9" while(bit>2){ last+=9 bit-- } console.log(String(first)+last) }
T = int(input()) for i in range(T): x = int(input()) if x < 10: n = x else: if x % 9 == 0: b = x // 9 n = str(9)*b else: b = x // 9 n = str(x % 9) + str(9)*b print(n)
C++,题意就是给你一个数字x,让你反推一个数字n,要求n的各位数之和等于x,而且n要最小
那么只有可能先从低位往高位填,比如:个位填满了(个位为9),才会去考虑填十位,以此类推
#include <iostream> #include <vector> using namespace std; void S(vector<int>& nums) { string str; for (int num : nums) { // 主要特别考虑num%9=0的情况 if (num % 9 != 0)cout << num % 9; while (num >= 9) { cout << 9; num -= 9; } cout << endl; } } int main() { // 意思是反推一个数字,这个数字的各位数之和等于x,而且这个数字必须最小 int n,num; vector<int> nums; cin >> n; while (n-- > 0) { cin >> num; nums.push_back(num); } S(nums); return 0; }
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); var arr = [] var T = null rl.on('line', function (line) { arr.push(parseInt(line)) if(arr[0] == arr.length-1){ for (let i = 1; i < arr.length; i++) { let n = parseInt(arr[i]/9) let f = arr[i] % 9 let str = f==0?'':String(f) while(n>0){ n-- str += '9' } console.log(str) } } //console.log(arr) });
解题思路:位数指的是个位,十位,百位这个位数,每个位数最大为 9,先填满低位的,剩余的在填到高位。输出采用字符串类型,不然会超出栈。
import java.util.Scanner; /** x<S(n),同等于x小于S(n)的最小值,十进制中,把后面位数的值(如个位数)设置越大, 整个数的值越小,因为是十进制,位数最大值为9. **/ public class Main{ public static void main(String args[]){ Scanner in = new Scanner(System.in);//输入字符 int length = in.nextInt();//nextInt()设置空格作为分隔 for(int i=0;i<length;i++){//把分隔开的数字分别放入S(n)方法中 System.out.println(s(in.nextInt())); } } public static String s(int x){ StringBuilder builder = new StringBuilder(); //当各位数字和大于9时,和-9,若小于9,这个数作为最高位 while(x-9>0){ builder.append("9");//将9追加到此字符序列 x-=9;//各数字的总和x-9 } String result = String.valueOf(x)+builder.toString();//最后小于9的数作为最高位,后面加上builder中追加的9 return result; } }
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int group = sc.nextInt(); for (int i = 0; i < group; i++) { System.out.println(func(sc.nextInt())); } } public static String func(int num) { StringBuffer sBuffer = new StringBuffer(); while (num > 9) { sBuffer.append("9"); num -= 9; } String res = String.valueOf(num) + sBuffer.toString(); return res; } }
n=int(input()) for i in range(n): x=int(input()) k=x//9 m=x-9*k print int(str(m)+'9'*k)