我只是不确定我哪里出错了。编写一个程序以打印出 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 > 0) if(n & 1) result *= x; x = x * x; n >>=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 中的素因数分解并与它一起练习链接的主要内容,如果未能解决你的问题,请参考以下文章