gpt4 book ai didi

c - 如何找到第n个数?

转载 作者:太空宇宙 更新时间:2023-11-04 03:09:20 26 4
gpt4 key购买 nike

对于一项作业,我必须编写代码接受整数 n 作为输入并输出第 n 个“异常”数字。

前几个su-numbers是:22, 23, 26, 33, ...所以当输入为1时,输出应该是22。2给出23,3给出26。

我已经有一个代码可以检查输入的数字是否为 su-number,但我找不到计算第 n 个数字的方法。

所以当我现在输入 22 时,它说 22 是一个超不寻常的数字。

代码:

/* calculates largest prime factor                  */
int lprime(int n) {
int max = -1;

while (n % 2 == 0) {
max = 2;
n /= 2;
}

for (int i = 3; i*i <= n; i += 2) {
while (n % i == 0) {
max = i;
n = n / i;
}
}

if (n > 2) {
max = n;
}
return max;
}

/* check unusual number */
int unus(int n) {
/* find largest prime of number */
int factor = lprime(n);

/* Check if largest prime > sqrt(n) */
if ((factor*factor) > n) {
return 1; /* true */
}
else {
return 0; /* false */
}
}

/* delete digit from number */
int del(int num, int n) {
int d = log10(num)+1; /* checks amount of digits */
int revnew = 0;
int new = 0;

for (int i = 0; num != 0; i++) {
int dig = num % 10;

num = num / 10;

if(i == (d - n)) {
continue;
} else {
revnew = (revnew * 10) + dig;
}
}

for (int i = 0; revnew != 0; i++) {
new = (new*10) + (revnew % 10);
revnew = revnew / 10;
}
return new;
}

/* driver code */
int main(int argc, char* v[]) {
int m=22, n;
int x = 0;
int i = 1;
int counter = 0;

scanf("%d", &n);

int d = log10(m)+1;

while (counter < n) {
if (unus(m++)) {
counter++;
}
}

for(unus(m); i < d; i++) {
int nmin = del(m, i);
if (unus(nmin)) {
continue;
} else {
printf("%d is not supurunusual\n", (m-1));
x++;
}
}

if(x==0) {
printf("%d is superunusual!\n", (m-1));
}
return 0;
}

我希望你能理解我的代码。否则我会更好地解释它。

此外,我对编码很陌生,所以请不要太苛刻......

最佳答案

您有一个函数来确定一个数字是否异常,但是您在 main 例程的主体中检查一个数字是否非常异常。如果将该代码提取到适当的函数中:

int is_superunusual(int m)
{
int d = log10(m) + 1;

if (unus(m) == 0) return 0;

for(int i = 0; i < d; i++) { // see footnote
int nmin = del(m, i);

if (unus(nmin) == 0) return 0;
}

return 1;
}

然后你可以使用 Eugene 的代码:

while (counter < n) { 
if (is_superunusual(m++)) {
counter++;
}
}

printf("The su number #%d is %d\n", n, m - 1);

您的代码测试了异常数字,而不是 super 异常数字。

脚注:如果您使用 del(num, n) 表示“从末尾删除第 n 个数字”,则可以取消 del 中的 log10 调用.无论如何,您必须检查所有删除,因此顺序在这里并不重要。

关于c - 如何找到第n个数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58207647/

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