从大于等于N的正整数里找到一个最小的数M,使之满足:M和M的逆序数(如1230的逆序数为321)的乘积为一个[100000000,200000000]区间内的值。输入说明:起始数输出说明:找到的第一个符合条件的数,如果没有符合条件的数,输出F。输入字N;样例:123456输出样例:124100
代码:
C++:
#include<iostream>
#include<string>
using namespace std;
int main() {
long long n; cin >> n;
bool flag = true;
for (auto i = n; i <= 200000000; i++) {
string s;
s = to_string(i);
string s1 = "";
for (auto j = 0; j < s.length(); j++) {
s1 += s[s.length() - 1 - j];
}
int num = stoi(s1);
if (i * num >= 100000000 && i * num <= 200000000) {
cout << i << endl;
flag = false;
break;
}
}
if (flag == true) {
cout << "F" << endl;
}
return 0;
}
Java:
package com.my.gududu;
import java.util.*;
public class Main {
public static void main(String[] args) {
boolean flag = true;
Scanner input = new Scanner(System.in);
int n = input.nextInt();
for (int i = n; i <= 200000000; i++) {
StringBuilder s = new StringBuilder(String.valueOf(i));
String s1 = "";
for (int j = 0; j < s.length(); j++) {
s1 += s.charAt(s.length() - 1 - j);
}
int num = Integer.valueOf(s1);
if (i * num >= 100000000 && i * num <= 200000000) {
System.out.println(i);
flag = false;
break;
}
}
if (flag == true) {
System.out.println("F");
}
}
}
python:
n = int(input())
flag = True
for i in range(n, 200000001, 1):
s1 = ''
s = str(i)
for j in range(len(s)):
s1 += s[len(s) - 1 - j]
num = int(s1)
if i * num >= 100000000 and i * num <= 200000000:
flag = False
print(i)
break
if flag == True:
print("F")