C++ 算法:寻找最小 P 使得 N*P 为 111...11 格式的数
以下是用 C++ 编写的解题代码:
#include <iostream>
#include <string>
using namespace std;
int findP(int n) {
int p = 1;
int remainder = 1 % n;
while (remainder != 0) {
remainder = (remainder * 10 + 1) % n;
p++;
}
return p;
}
int main() {
int N;
cout << "请输入 N:";
cin >> N;
int P = findP(N);
long long result = N * P;
int digits = to_string(result).length();
cout << "P = " << P << endl;
cout << "N * P = " << result << endl;
cout << "位数 = " << digits << endl;
return 0;
}
这个程序首先通过一个函数 findP 来寻找满足条件的最小的 P。函数中使用了循环来计算 N * P 的余数,如果余数不为 0,则继续乘 10 加 1 再取余数,直到余数为 0 时停止循环。循环的次数就是 P 的值。
在 main 函数中,首先输入 N,然后调用 findP 函数得到 P 的值。接着计算 N * P 的结果,并使用 to_string 函数将结果转换为字符串,然后计算字符串的长度,即为位数。
最后,输出 P 的值、N * P 的值以及位数。
原文地址: https://www.cveoy.top/t/topic/p66p 著作权归作者所有。请勿转载和采集!