我只是不确定我哪里出错了。编写一个程序以打印出 c 中的素因数分解并与它一起练习链接

Posted

技术标签:

【中文标题】我只是不确定我哪里出错了。编写一个程序以打印出 c 中的素因数分解并与它一起练习链接【英文标题】:I just am not sure where I am going wrong. Writing a program to print out prime factorization in c and practicing linking along with it 【发布时间】:2017-01-27 19:59:44 【问题描述】:

在这个程序中,最后我不断收到一个浮点异常。我正在使用两个主要文件。第一个是下面列出的“主要”:

int main() 
int ans;
do
printf("Enter an integer greater than 1:\n");
scanf("%d", &ans);
while(ans <= 1);

printf("%d = ", ans);

int d = 2;

while(ans >= d)

if(ans == d)
        printf("%d ^ %d", d, factor_power(ans, d));
        ans = ans / (d ^ (factor_power(ans, d)));


else
        printf("%d ^ %d * ", d , factor_power(ans , d));
        ans = ans/(d ^ (factor_power(ans, d)));
        d++;

        


printf("\n");

return 0;

包含 factor_power() 方法的文件在这里:

int factor_power(int n, int d)
int p = 1;

do
if( n % (d ^ p) == 0)
        p ++;
while(n % (d^(p+1)) == 0);

return p;

两者都包括我的标头、math.h 和 stdio.h。我只是迷失了浮点异常的来源。该程序应该打印出主要因素,例如:

1200 = 2^4 * 3^1 * 5*2。

非常感谢 Amy 的反馈。

【问题讨论】:

哦,哇,好吧,你如何获得一个 int 值,在 C 中将某事物与其他事物相乘?对不起,如果那很愚蠢,我才刚刚开始学习 C 例如int ipower(int x, int n)/*x^n */ int result = 1; while(n &gt; 0) if(n &amp; 1) result *= x; x = x * x; n &gt;&gt;=1; return result; 投了反对票,因为我认为如果你开始学习 C,你也应该开始学习如何使用调试器。使用调试器可以轻松找到此问题。 【参考方案1】:

尝试以下操作:

 int ipow(int base, int exp)
 
 int power = 1;
 while (exp)
 
    if (exp & 1)
        power *= base;
    exp >>= 1;
    base *= base;
  

 return power;
 


int factor_power(int n, int d)
 int p = 1;

 do
 if( (n % ipow(d,p)) == 0)
    p++;
  while((n % ipow(d,(p+1))) == 0);

  return p;
  

如果您还没有包含“math.h”,您可能必须包含。

希望对你有帮助!

【讨论】:

检查exp 是否为负数可能也是明智之举 @M.M 不需要,因为 p(exp) 初始化为 1,每次迭代时递增 1。

以上是关于我只是不确定我哪里出错了。编写一个程序以打印出 c 中的素因数分解并与它一起练习链接的主要内容,如果未能解决你的问题,请参考以下文章

在 C 中创建和显示链表:程序显示不正确

C Vigenere 密码不打印

无法从 Objective C 插件返回到 Ionic/Cordova 应用程序时出错

如何确定安装打印机的服务器

C中的简单堆栈程序

打印出两个输入是不是是彼此的字谜