c - 不用pow()通过C程序求整数m的n次方

标签 c floating-point integer signed

不用 pow() 求整数 m 的 n 次方的 C 程序。

输入:

m=3 n=2
output:
9.000

测试以验证程序是否按预期工作!

  1. 对于负 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

    因此,固定代码将是(根据您的喜好添加非标准的 clrscrgetch ;):

    #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/

    相关文章:

    r - 最大整数的预定义常量

    java - 代码优化: Sum integer values for specific string,

    python - 将整数作为字符串转换为 int 时如何不引发 Python 异常

    c - tgkill 杀死整个进程,而不仅仅是通过的 tid

    c++ - 为什么没有 2 字节浮点并且已经存在实现?

    c - 为什么 float 数据类型以不同方式对待 X/Y(例如 5/9)和 X.0/Y.0(例如 5.0/9.0)?

    java - 为什么这个精度失败的示例显示为 double 而不是 float ?

    c - Windows:从内核终止进程的不同方法

    c - 如何为具有 SRC、OBJ 和 BIN 子目录的 C 项目创建 Makefile?

    将任意大数转换为 base 256