C++ 程序求能被 X 整除的最大 K 位数字?

server side programmingprogrammingc++

在这个问题中,我们将尝试找到能被 X 整除的最大 K 位数字。为了完成这项任务,我们将通过以下公式 ((10^k) – 1) 取最大 K 位数字。然后检查该数字是否可以被 X 整除,如果不能,我们将使用此公式获得确切的数字。

𝑚𝑎𝑥−(𝑚𝑎𝑥 𝑚𝑜𝑑 𝑋)

一个例子就像一个 5 位数,可以被 29 整除。所以最大的 5 位数是 99999。这不能被 29 整除。现在通过应用公式我们将得到 −

99999−(99999 𝑚𝑜𝑑 29)=99999−7=99992

数字 99992 是能被 29 整除。

算法

maxKDigit(k, x)

begin
   max = (10^k) - 1
   如果 max 能被 x 整除,则返回 max
   否则返回 max – (max mod x)
end

示例

#include<iostream>
#include<cmath>
using namespace std;
long max_k_digit(int k, int x){
   //获取 k 位数字的最大位数
   int max = pow(10, k) - 1;
   if(max % x == 0){
      return max;
   }
   return (max) - (max % x);
}
main() {
   int k, x;
   cout << "输入位数(K)和除数(N): ";
   cin >> k >> x;
   cout << "结果为: " << max_k_digit(k, x);
}

输出

输入位数(K)和除数(N):5 29
结果为:99992

输出

输入位数(K)和除数(N):6 87
结果为:999978

相关文章