zoukankan      html  css  js  c++  java
  • [算法]高精度运算

    (本人知识 while(1)cout<<"非常"; 有限,如果你看到我有任何错漏或者不足,真的真的真的恳请大家指出,蟹蟹,我希望大家可以一起进步~)

     一.摘要

    int类型的变量只能存放-2^31~2^31-1范围的数据

    long long类型的变量只能存放-2^63~2^63-1范围的数据

    对于大数阶乘这种肯定是存不下,因此我们需要用数组存放数据;

    二.高精度加法与高精度乘法(低精度*高精度)

      下面是一个高精度运算的例子:

    题目描述

      用高精度计算出S=1!+2!+3!+…+n! (n≤50)S=1!+2!+3!++n!(n50)

    思路:

      为了减少循环次数以及数组的长度,这里使用long long数组存放数据

    代码(C++描述)

     1 /**[编程入门]阶乘求和*/
     2 #include<iostream>
     3 #include<stdio.h>
     4 #include<math.h>
     5 using namespace std;
     6 //存总和,初始化为0,每个long long存15位 
     7 long long data[10]={0};
     8 long long t[10]={1,0};//存i!,初始化为1,否则0的话永远为0 
     9 int len=10; //俩数组的长度 
    10 int n;
    11 long long myMax=pow(10,15);
    12 
    13 void myAdd(){//将i!加到data[] 
    14     int i,j;
    15     int temp=0;//进位 
    16     for(i=0;i<len;i++){
    17         data[i]=data[i]+t[i]+temp;
    18         temp=data[i]>=myMax?data[i]/myMax:0;
    19         data[i]=data[i]%myMax; 
    20     }
    21 }
    22 void myMul(int m){//乘法 
    23     int i,j;
    24     int temp=0;//进位 
    25     for(i=0;i<len;i++){
    26         t[i]=t[i]*m+temp;
    27         temp=t[i]>=myMax?t[i]/myMax:0;
    28         t[i]=t[i]%myMax;
    29     }
    30 } 
    31 void print(){//打印结果 
    32     int i,j,flag=0;
    33     for(i=len-1;i>=0;i--){
    34         if(flag==1){
    35             printf("%015lld",data[i]);//之后的数格式化输出,输出15位 
    36         }
    37         if(data[i]!=0&&flag==0){
    38             flag=1; 
    39             printf("%lld",data[i]);//第一个数不需要格式化输出 
    40         }
    41     }
    42 }
    43 int main(){
    44     int i,j;
    45     cin>>n;
    46     for(i=1;i<=n;i++){
    47         myMul(i); //乘法 
    48         myAdd(); //加法 
    49     }
    50     print();//打印结果 
    51     return 0; 
    52 }

    运行结果:


    三.高精度乘法

    四.高精度除法

  • 相关阅读:
    标准输入/输出通道
    不要在纠结负数的表示了
    Coursera公开课-Machine_learing:编程作业7
    Heap堆
    广义表的实现
    二叉树的实现
    模拟实现strstr和strrstr
    栈和队列常考面试题(二)
    栈和队列常考面试题(一)
    vector迭代器失效的几种情况
  • 原文地址:https://www.cnblogs.com/chasemeng/p/12668470.html
Copyright © 2011-2022 走看看