`
美丽的小岛
  • 浏览: 309480 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

不用除法运算符的除法

阅读更多

题目描述:

给定一数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]a[N-1] / a[j],在构造过程中,不允许使用除法:

要求O1)空间复杂度和On)的时间复杂度;

除遍历计数器与a[N] b[N]外,不可使用新的变量(包括栈临时变量、堆空间和全局静态变量等);实现程序(主流编程语言任选)实现并简单描述。

代码:

 

#include <stdio.h>   
void PrintfArray(int a[], int n)    
{    
    for (int i = 0; i < n; i++)    
           printf("%5d ", a[i]);    
    putchar('\n');    
}   
int main()  
{  
    const int MAXN = 5;  
    int a[MAXN] = {1, 3, 5, 7, 9};  
    int b[MAXN];  
      
    printf("数组a为:\n");  
    PrintfArray(a, MAXN);  
  
    b[0] = 1;  
    int i;  
    for (i = 1; i < MAXN; i++)  
        b[i] = b[i - 1] * a[i - 1];  
    int temp = 1;  
    for (i = MAXN - 2; i >= 0; i--)  
    {  
        temp *= a[i + 1];  
        b[i] *= temp;  
    }  
  
    printf("数组b为:\n");  
    PrintfArray(b, MAXN);  
    return 0;  
}  

 分析:

设有数组大小为5

对于第一个for循环

第一步:b[0] = 1;

第二步:b[1] = b[0] * a[0] = a[0]

第三步:b[2] = b[1] * a[1] = a[0] * a[1];

第四步:b[3] = b[2] * a[2] = a[0] * a[1] * a[2];

第五步:b[4] = b[3] * a[3] = a[0] * a[1] * a[2] * a[3];

然后对于第二个for循环

第一步

temp *= a[4] = a[4];  

b[3] = b[3] * temp = a[0] * a[1] * a[2] * a[4];

第二步

temp *= a[3] = a[4] * a[3];

b[2] = b[2] * temp = a[0] * a[1] * a[4] * a[3];

第三步

temp *= a[2] = a[4] * a[3] * a[2];  

b[1] = b[1] * temp = a[0] * a[4] * a[3] * a[2];

第四步

temp *= a[1] = a[4] * a[3] * a[2] * a[1];  

b[0] = b[0] * temp = a[4] * a[3] * a[2] * a[1];

代码修改为:

 for (i = MAXN - 2; i >= 0; i--)  
    {  
        temp *= a[i + 1];  
        b[i] *= temp;  
    }  

 

改为

 

for (i = MAXN - 1; i >= 1; i--)  
{  
    b[i] *= b[0];  
    b[0] *= a[i];  
}  

 

参考转自:http://blog.csdn.net/morewindows/article/details/8742666

分享到:
评论

相关推荐

    C#中的除法运算符与VB.NET中的除法运算符

    VB.NET中的除法运算符有两个:/(浮点除法)、\(整数除法) C#中的除法运算符只有一个:/(除法) VB.NET中的除法运算符与C#中的除法运算符存在很大的差异,使用时注意区分。   关于VB.NET中的除法运算符的介绍...

    rtliol.zip_5TS_Verilog代码_verilog 除法器_除法器_除法器verilog

    3. **算术操作**:Verilog提供了基本的算术运算符,如`*`(乘法)、`-`(减法)等,这些在除法器的实现中必不可少。设计者需要利用这些操作符进行乘法、减法和比较等操作。 4. **条件语句**:在5TS除法器中,会用到...

    2.带余除法的c语言程序

    在C语言中,可以使用`%`运算符来求余数,`/`运算符来进行除法运算。然而,这两个运算符并不会同时返回商和余数,所以我们需要自定义函数来实现带余除法的功能。以下是一个简单的C语言函数示例,用于执行带余除法: ...

    pb9实现四则运算(加减乘除括号).rar

    在计算机编程中,加法、减法、乘法和除法是基础的算术操作。在PB9中,你可以使用内置的数学函数或运算符来执行这些操作。例如,`+` 用于加法,`-` 用于减法,`*` 用于乘法,`/` 用于除法。表达式 "1+5*(2-3)" 展示了...

    python-除法运算.docx

    1. 整数除法:在Python 3中,两个整数之间的除法会返回一个浮点数结果,除非使用特殊的除法运算符`//`。例如,`10 // 3`将返回3,因为它只取整数部分,丢弃小数部分。然而,如果其中一个数字是浮点数,如`10.0 // 3`...

    C语言中整数除法取商和取余运算的实现.pdf

    C语言提供了除法运算符“/”来求取商,以及取余运算符“%”来求取余数。但在某些情况下,特别是当被除数为负数时,直接使用这些运算符得到的结果可能不符合预期,因为C语言标准中,对负数的商取整是向零取整,而余数...

    除法运算方法

    MATLAB中的除法运算符“/”默认执行浮点除法,这意味着任何整数除法都会被自动转换为浮点数。如果你需要执行整数除法,可以使用'fix'或'mod'函数。例如,`k = fix(a/b)`会返回商的整数部分,而`r = mod(a,b)`会返回...

    用verilog实现除法器(两种方法)

    用verilog语言编写出一个除法器的代码,并在modelsim中进行功能仿真,认真的完成实验报告。 二、 实验设备(环境)及要求: 在modelsim环境下编写代码与测试程序,并仿真; 在synplify pro下编译,设置硬件并综合。 ...

    整数乘除法练习器

    总结,整数乘除法练习器的实现涉及C语言的基本元素,包括数据类型、输入输出、运算符、控制流程、错误处理以及程序结构。通过这样的练习器,用户可以在实践中巩固对整数乘除法的理解,同时提高编程技能。

    在EXCEL中实现除法操作

    可以将除法与其他运算符结合使用,例如`=A1 + B1 / C1`。 7. **百分比除法** 如果需要将除法结果转换为百分比,可以使用乘以100%的方式,如`=A1/B1*100%`。 8. **分母为单元格范围的除法** 有时候需要将一个数值...

    JavaScript实现检验除法运算

    首先,我们需要了解JavaScript中的除法运算符 `/`。当两个数值进行除法运算时,如果被除数是整数,而除数为非零整数,那么结果将是一个浮点数。例如,`5 / 2` 结果为 `2.5`。然而,如果除数为零,JavaScript会抛出一...

    verilog用减法实现可综合除法器

    由于直接使用除法运算符"/"可能会导致难以综合或者对时序产生不良影响,因此开发者通常会采用其他方法来实现除法运算,以确保电路在时钟周期内完成运算。 移位除法器是一种常用的实现方式,它通过移位和减法操作来...

    vb基础算数运算符[参照].pdf

    * 浮点除法运算符的优先级别高于整数除法运算符。 例如,Private Sub Command1_Click() Dim A As Double A = 8 * 3 ^ 2 MsgBox A End Sub 字符串表达式 字符串表达式是由字符串运算符连接而成的式子。VB中只有...

    该程序是除法计算器的源程序

    3. **运算符**:大多数编程语言中,除法运算符是`/`,整数除法可能使用另一个运算符,如C++中的`/`和`%`分别代表浮点除法和整数除法。 4. **精度问题**:浮点除法可能会涉及到精度问题,尤其是在不同数据类型的混合...

    完善除法计算器

    2. **运算符**:Java中的除法运算符有 `/` 和 `%`,分别对应商和余数。根据功能需求,可能需要对这两个运算符进行不同的处理。 3. **异常处理**:Java的除法运算会抛出ArithmeticException异常,如除以零。程序需要...

    sql语句的除法表示

    以上所述,虽然SQL没有直接的除法运算符,但通过各种查询技巧和操作,我们可以有效地模拟并实现关系代数中的除法运算。在处理复杂的数据关系时,掌握这些方法能够帮助我们更好地理解和分析数据。

    大数除法运算

    在这样的情况下,我们不能直接依赖内置的算术运算符,而是需要设计特殊的算法来实现大数的除法操作。 大数处理的核心在于数组或链表的使用,因为这些数据结构可以存储任意长度的数字序列。在描述中提到的“将大数...

    asp运算符图片运算符图片

    例如,加法运算符"+"用于将两个数值相加,减法运算符"-"用于做减法,乘法运算符"*"用于乘法,除法运算符"/"用于除法,以及取模运算符 "%"用于求余数。例如,`var result = 5 + 3;`将返回8。 2. **赋值运算符**:...

    C语言运算符的优先级

    第三级:除法运算符、乘法运算符、取模运算符 * 除法运算符:/表达式 * 乘法运算符:*表达式 * 取模运算符:%整型表达式 这些运算符都具有同样的优先级,执行顺序从左到右。 第四级:加法运算符、减法运算符 * ...

Global site tag (gtag.js) - Google Analytics