无法理解代码片段

标签 c

我无法理解代码如何给出输入的素因数的输出。在这段代码中 temp 变量有什么用?另一个问题是代码片段中 i=1 的目的是什么?

#include<stdio.h>
int main()
{
    int number,i,temp;
    scanf("%d",&number);

    if(number<0)
    {
      printf("%d = -1 x ",number); //just printing
      number=number*-1; //multiplication by -1
    }
    else
    {
      printf("%d = ",number); //just printing
    }
    for(i=2;i*i<=number;i++)
    {
      if(number%i==0)
      {
         printf("%d x ",i);
         number=number/i;
         temp=i;
         i=1;
      }
    }
    printf("%d\n",number);

    return 0;
}


sample input:100
sample output:100 = 2 x 2 x 5 x 5
sample input:20
sample output:20 = 2 x 2 x 5

最佳答案

如前所述,temp 未使用。

打印素数的方式是一遍又一遍地尝试用该数字除以可能的最小数字。这就是 i=1 的目的。

所以取175。

首先,循环初始化为 2。然后递增 i 直到 175 % i == 0。发生这种情况时,意味着 i 是 175 的因数。因此它会打印 i 并将 175 除以 i。这可确保您不会重复计算该系数。在这里,这将首先发生在 i == 5 时。所以现在 num = 175/5 = 35。

此时,i 被重置为 1。循环 block 结束时发生的第一件事是 i 增加到 2。所以现在它再次寻找最小的因子。再次,它找到了 5。

如果 i 没有设置为 1,程序将继续向上运行,并且会错过 5 是 175 的因数两倍的事实。

最终,当 i > number 时,程序知道它已找到所有因子。这是因为因子必须小于它们作为因子的数量。

希望这有帮助。

关于无法理解代码片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24836962/

相关文章:

c++ - 如何在包含 typedef 的情况下使用从右到左的规则解释变量声明?

c - 大端字节数组到 C、arm 中的小端结构元素

我们可以返回非指针函数的值吗

c - 不明白为什么C程序崩溃,字符串指针数组

c - GtkColorChooser 与 GtkColorSelection

c - 最容易在C中实现在线排序数据结构

c - 检测 C 中的结构字段访问

c - 信号处理程序中奇怪的 sleep 行为

java - 如何在 android L 上加载 OpenCV 时删除日志记录语句

c - 如何将字符串文字用作其他左值?