gpt4 book ai didi

c++ - 将整数的数字拆分为 vector ,旋转它们,然后转换回整数

转载 作者:行者123 更新时间:2023-11-28 06:11:55 24 4
gpt4 key购买 nike

我的目标是取一个整数,我的例子是 197,检查它是否是素数,如果是素数,旋转数字并检查素数,直到我回到 197,否则破坏外观。我计划循环遍历大量数字来执行此操作。

我使用的第一个方法是 myPow。它用于获取 long int 的幂(如 2^20)。

long myPow(long x, long p) {
if (p == 0) { return 1; }
if (p == 1){ return x; }
return x * myPow(x, p - 1);
}

此函数计算位数。

int numdigits(long r){
unsigned int number_of_digits = 0;

do {
++number_of_digits;
r /= 10;
} while (r);
return number_of_digits;
}

这检查素数。

bool isPrime(unsigned long long n) {
if (n <= 3) {
return n > 1;
}

if (n % 2 == 0 || n % 3 == 0) {
return false;
}

for (unsigned long long i = 5; i * i <= n; i += 6) {
if (n % i == 0 || n % (i + 2) == 0) {
return false;
}
}

return true;
}

这需要一个整数并将数字拆分为一个 vector (整数 123 -> vector (1,2,3))

vector<int> digits(int x){
vector<int> myvec;
while (x >= 10){
myvec.push_back(x % 10);
x = x / 10;
}

myvec.push_back(x);
reverse(myvec.begin(), myvec.end());
return myvec;
}

这是主类。
它遍历每个整数,检查它是否为素数。如果它是质数,我使用 k 将它与 i 进行比较,因为最终它会旋转到自身并且 while 外观将完成。我将标志设置为真,当数字的不同旋转不能为素数并且循环完成后,它将不计算整数时将其设置为假。我创建 vector mydigs 来存储数字,让 h = 数字的数量。我分配 a = h 以避免在 while 循环中计算 numdigits(i)。

这是我认为事情不对的地方。我旋转一次并将 k 指定为整数。我检查它是否是质数,如果不是,则中断并将标志设置为 false。否则它将继续循环并保持旋转。问题是当我只运行 197 时,我知道每次旋转整数时它都是质数,但我最终失败了,因为当我第二次旋转时我得到了错误的数字。这就是为什么我让它输出 k,只是为了看看为什么会出错。

输出应该是什么:

971,719,1

我得到的输出:

971,1690,<——这个我不明白。0,

int main(){
unsigned t0 = clock();
int totalcircle = 0;
for (int i = 197; i < 198; i += 2){
if (isPrime(i)){
long k = 0;
bool flag = true;
vector<int> mydigs = digits(i);
int h = numdigits(i);
int a;
while (i != k){
a = h;
rotate(mydigs.begin(), mydigs.begin()+1, mydigs.end());
for (vector<int>::iterator it = mydigs.begin(); it != mydigs.end(); ++it){
k += (*it) * myPow(10, a - 1);
a--;
}

std::cout << k << std::endl;
if (!isPrime(k)){
flag = false;
break;
}

}
if (flag){
std::cout << i << endl;
totalcircle++;
}
}

}

std::cout << totalcircle << endl;
unsigned elapsed = clock() - t0;
std::cout << "Elapsed time: " << elapsed << endl;
std::system("pause");
return 0;
}

最佳答案

您可以使用 std::rotate 代替您的函数,如下所示

#include <iostream>     
#include <algorithm>
#include <vector>
int main () {
std::vector<int> myvector={1,9,7};
std::rotate(myvector.begin(),myvector.end()-1, myvector.end());
std::cout << "myvector contains:";
for ( auto &x : myvector)
std::cout<<x;
std::cout << '\n';

return 0;
}

关于c++ - 将整数的数字拆分为 vector ,旋转它们,然后转换回整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31094979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com