for循环中存在错误

时间:2017-11-08 23:41:34

标签: c

  

由于某种原因,这个循环没有停止,没有其他它甚至没有打印第一行,我不知道如何解决它

    for(int i = 0; prime <= sqrt(rest); ++i) {
        printf("%d", i);
        if (primes[i] == 1) {
            prime = primes[i];
            printf("%d", prime);
            while (rest % prime == 0) {
                rest = rest / prime;
                rep++;
            }
            if (rep == 1) {
                printf("%d", i);
                print++;
            } else if (rep > 1) {
                printf("%d^%d", prime, rep);
                print++;
            }
            if (rest != 1 && print != 0) {
                printf(" x ");
            } else if (print != 0) {
                printf("\n");
            }
            rep = 0;
            print = 0;
        }else{
            printf("WTF\n%d\n", i);
            i++;
        }
    }
    if (rest > 1) {
        printf("%lld\n", rest);
    } else{
        printf("WTF\n");
        break;
    }
}

3 个答案:

答案 0 :(得分:0)

你永远不会改变素数的值,这是因为你的条件被设置为停止,所以如果它永远不会改变,它将永远不会停止。在你的for循环开始时,也许你的意思是素数而不是我?

答案 1 :(得分:0)

您的代码包含无穷无尽的时间:

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
    }
}

一旦休息达到0,这将永远为真,并且你继续将休息除以素数,但是package hello; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ,所以它会一直持续下去。

同样适用于while (rest % prime == 0) {...},这是您指定的值 - 0/prime = 0,每次都是prime = 1,依此类推,永远。

答案 2 :(得分:0)

所以我犯的错误就是这样: prime = primes [i]; ,如果我使用 prime = i; 而是一切正常,我认为我之所以这样做,是因为我不习惯使用像你那样使用数量的列表。谢谢大家的帮助