不用 pow() 求整数 m 的 n 次方的 C 程序。
输入:
m=3 n=2
output:
9.000
测试以验证程序是否按预期工作!
- 对于负 M
Input : -2 3 output : -8.000
- 对于负 N
Input : 2 -3 output : 0.125000
- 对于负 M 和 N
Input : -2 -3 output : -0.125000
但是我没有得到所需的输出
void main()
{
signed int m, n;
int i;
float p;
clrscr();
printf("Enter the number and its power (exponent)\n");
scanf("%d%d",&m,&n);
p=1;
if (n==0)
{
printf("%d raised to %d is: %f",m,n,p);
}
if (n>0)
{
for( i = 0 ; i < n ; i++ )
p*=m;
if(m>0)
printf("%d raised to %d is: %f",m,n,p);
if(m<0)
printf("%d raised to %d is: %f",m,n,-p);
}
if (n<0)
{
n=-n;
for( i = 0 ; i < n ; i++ )
p*=m;
if(m>0)
printf("%d raised to %d is: %f",m,-n,1/p);
if(m<0)
printf("%d raised to %d is: %f",m,-n,-(1/p));
}
getch();
}
您能否提供测试用例的正确程序?
我无法声明signed float
,因为它给出了错误。
最佳答案
底片代码不正确。当基数 m
为负数时,您不能盲目地否定结果。
,但是 。另外,如果 m
为零,您就不会打印任何内容!
并且 int
默认情况下是有符号的,因此 signed int
是噪音。 float
也有符号;但在这里您也可以使用 double 来获得更高的精度。 main
的返回值应该是 int
。
因此,固定代码将是(根据您的喜好添加非标准的 clrscr
和 getch
;):
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m, n, i;
double p = 1.0;
printf("Enter the number and its power (exponent)\n");
scanf("%d%d",&m,&n);
if (n==0) {
printf("%d raised to %d is: %f",m,n,p);
}
else if (n > 0) {
for(i = 0; i < n; i++)
p*=m;
printf("%d raised to %d is: %f",m,n,p);
}
else { // n < 0
n = -n;
for (i = 0 ; i < n ; i++)
p*=m;
printf("%d raised to %d is: %f", m, -n, 1 / p);
}
}
关于c - 不用pow()通过C程序求整数m的n次方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45211559/