Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何找到第n个号码?_C_Loops - Fatal编程技术网

C 如何找到第n个号码?

C 如何找到第n个号码?,c,loops,C,Loops,对于赋值,我必须编写接受整数n作为输入并输出第n个“超常”数字的代码 前几个su数字是:22,23,26,33。。。因此,当输入为1时,输出应为22。2得23分,3得26分 我已经有了一个代码来检查输入的数字是否是su数字,但是我找不到计算第n个数字的方法 所以当我现在输入22时,它说22是一个非常不寻常的数字 守则: /*计算最大素因子*/ int-lpinite(int-n){ int max=-1; 而(n%2==0){ max=2; n/=2; } 对于(inti=3;i*i2){ ma

对于赋值,我必须编写接受整数n作为输入并输出第n个“超常”数字的代码

前几个su数字是:22,23,26,33。。。因此,当输入为1时,输出应为22。2得23分,3得26分

我已经有了一个代码来检查输入的数字是否是su数字,但是我找不到计算第n个数字的方法

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

守则:

/*计算最大素因子*/
int-lpinite(int-n){
int max=-1;
而(n%2==0){
max=2;
n/=2;
}
对于(inti=3;i*i2){
max=n;
}
返回最大值;
}  
/*检查异常编号*/
国际联合国大学(国际北){
/*求数的最大素数*/
整数因子=lprime(n);
/*检查最大素数是否大于sqrt(n)*/
如果((因子*因子)>n{
返回1;/*true*/
}  
否则{
返回0;/*false*/
}  
} 
/*从数字中删除数字*/
int del(int num,int n){
int d=log10(num)+1;/*检查位数*/
int revnew=0;
int new=0;
for(int i=0;num!=0;i++){
int dig=num%10;
num=num/10;
如果(i==(d-n)){
继续;
}否则{
revnew=(revnew*10)+挖掘;
}
}
for(int i=0;revnew!=0;i++){
新=(新*10)+(revnew%10);
revnew=revnew/10;
}
归还新的;
} 
/*驱动程序代码*/
int main(int argc,char*v[]{
int m=22,n;
int x=0;
int i=1;
int计数器=0;
scanf(“%d”和“&n”);
int d=log10(m)+1;
while(counter
我希望你能理解我的代码。否则我会解释得更好


另外,我对编码还很陌生,所以请不要太苛刻……

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

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;
}
int是超常的(int m)
{
int d=log10(m)+1;
如果(联合国大学(m)=0)返回0;
对于(inti=0;i
然后你可以使用尤金的代码:

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

printf("The su number #%d is %d\n", n, m - 1);
while(计数器
您的代码测试的是异常数字,而不是超级异常数字


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

。。什么是“su number”?哦,对不起,su number=超常数。即使删除了其中一个数字,这个数字仍然是一个超常数(参见维基百科)。无论如何,您已经有了一个谓词来测试这个数字。因此,简单的算法是迭代所有的数字,并计算“su”数,直到达到给定的计数。很简单,不是吗?是的。我也知道它只缺少那个部分,但我不知道怎么做…谢谢!现在效果好多了。唯一的问题是,它现在给出了不寻常的数字,我需要超级不寻常的数字(所以,当1个数字被删除时,它仍然是不寻常的)呃,不,不是吗?将前五个、第50个和第500个超常数字打印为22、23、26、33、35、213和1643。我对代码做了一些修改,但保留了完整的整体结构。也许仍然有错误,但很明显这些都是苏,坚果,只是不寻常的数字,不是吗?哎呀!我没有用新编译的文件测试程序!愚蠢…它只适用于100,它应该给389,但给283。但我会弄明白的!谢谢你的帮助!你发现错误了吗?您的数字删除代码与以零结尾的数字有问题。固定版本。而且,为了更好地衡量,还有另一种变体,它使用了埃拉托内斯筛和另一种去除数字的方法。两者都给出了第100个su编号为389。玩得高兴