zoukankan      html  css  js  c++  java
  • 输出2的各次负幂表

    问题:

      编写程序计算并输出2的各次负幂表,要求至少能够获得2的负100次幂的精确表示。

    分析:

      如果使用双精度实型变量存放计算结果,由于C对于一个double型数据至多能精确到15至16位有效数字,从而对于诸如:2ˆ-30=0.0000000000093132257615478515625,就不能精确表示出来,而我们希望所输出的2的负幂表示实际上可达到的任意次负幂的精确表示。这就不能按常规办事,需要通过分析找出一定的规律并选择合适的算法。

    选择算法:

      2的各次负幂的值都是由十进制小数形式表示的,其小数位数和负幂次数相同。假定2的k次负幂的小数部分为f,今欲求2ˆ-6,即用2除f。可设法从i=1起逐位相除,。对于每一个十进制数位,它被2除只可能出现两种情况:被2整除或不能被2整除,取其商作为该位新的数值,而将余数(0或1)保留“并进位”到“下一位”十进制位的运算,因此,求2的各次负幂所选择算法是按在上一次所求的2的负幂的基础上,逐位相除(除2),余数进位,以获得2的下一次负幂。实际上最后一位不必计算就知道它永远都是5.

    程序设计:

      依题意最多计算2的负100次幂。故可说明一个一维整型数组变量,它的数组元素个数为100,每个数组元素用以放入一位十进制数字(0至9)。逐位相除运算用‘/’而余数只能是0或1,逐行输出

     1 #include<stdio.h>
     2 #define MAX 100
     3 int main(){
     4     int i,k,r,n;
     5     int d[MAX+1];
     6     do{
     7         printf("Enter an integer value n(1<=n<=%d):",MAX);
     8         scanf("%d",&n);
     9     }while(!(n>=1&&n<=100));
    10     printf("
    ");
    11     printf("The table of negative power of 2
    ");
    12     printf("     2**(-1)--2**(-%d)
    ",n);
    13     printf("
    
    ");
    14     for(k=1;k<=n;k++){
    15         printf("2**(-%3d)=0.",k);
    16         r=0;
    17         for(i=1;i<=k-1;i++){
    18             r=10*r+d[i];
    19             d[i]=r/2;
    20             r=r%2;
    21             printf("%d",d[i]); 
    22         }
    23         d[k]=5;
    24         printf("5
    ");
    25     }
    26     return 0;
    27 }
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 数的统计
    Java实现 蓝桥杯VIP 算法训练 和为T
    Java实现 蓝桥杯VIP 算法训练 友好数
    Java实现 蓝桥杯VIP 算法训练 连续正整数的和
    Java实现 蓝桥杯VIP 算法训练 寂寞的数
    Java实现 蓝桥杯VIP 算法训练 学做菜
    Java实现 蓝桥杯VIP 算法训练 暗恋
    Java实现 蓝桥杯VIP 算法训练 暗恋
    测试鼠标是否在窗口内,以及测试鼠标是否在窗口停留
    RichEdit 各个版本介绍
  • 原文地址:https://www.cnblogs.com/geziyu/p/8763582.html
Copyright © 2011-2022 走看看