zoukankan      html  css  js  c++  java
  • 算法复习——高精度集合

    加法:

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<ctime>
    #include<cctype>
    #include<algorithm>
    using namespace std;
    const int N=205;
    char s[N],t[N];
    int len,n,m,a[N],b[N],c[N];
    int main()
    {
      scanf("%s",s+1);
      int n=strlen(s+1);
      for(int i=1;i<=n;i++)
        a[n-i+1]=s[i]-'0';
      scanf("%s",t+1);
      int m=strlen(t+1);
      for(int i=1;i<=m;i++)
        b[m-i+1]=t[i]-'0';
      len=max(n,m);
      int x=0;
      for(int i=1;i<=len;i++)
      {
        x=a[i]+b[i]+x;
        c[i]=x%10;
        x=x/10;
      }
      if(x)  c[++len]=x;
      for(int i=len;i>=1;i--)
        cout<<c[i];
      return 0;
    }

    减法:

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    #include<ctime>
    #include<cctype>
    #include<cstring>
    #include<string>
    #include<algorithm>
    using namespace std;
    const int N=205;
    char s[N],t[N];
    int a[N],b[N],c[N],n,m,len;
    int main()
    {
      scanf("%s",s+1);
      n=strlen(s+1);
      for(int i=1;i<=n;i++)
        a[n-i+1]=s[i]-'0';
      scanf("%s",t+1);
      m=strlen(t+1);
      for(int i=1;i<=m;i++)
        b[m-i+1]=t[i]-'0';
      if(n<m||(n==m)&&strcmp(s+1,t+1)<0)
      {
        cout<<"-";
        for(int i=1;i<=m;i++)
          swap(a[i],b[i]);
        swap(n,m);
      }
      int x;
      for(int i=1;i<=n;i++)
      {
         x=10+a[i]-b[i];
         c[++len]=x%10;
         a[i+1]=a[i+1]+x/10-1;
      }
      while(!c[len]&&len>1)  len--;
      for(int i=len;i>=1;i--)
        cout<<c[i];
      return 0;
    }

    乘法

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    #include<ctime>
    #include<cctype>
    #include<cstring>
    #include<string>
    #include<algorithm>
    using namespace std;
    const int N=205;
    char s[N],t[N];
    int a[N],b[N],c[100000],n,m,len;
    int main()
    {
      scanf("%s",s+1);
      n=strlen(s+1);
      for(int i=1;i<=n;i++)
        a[n-i+1]=s[i]-'0';
      scanf("%s",t+1);
      m=strlen(t+1);
      for(int i=1;i<=m;i++)
        b[m-i+1]=t[i]-'0';
      for(int i=1;i<=n;i++)
      {
        int x=0; 
        for(int j=1;j<=m;j++)
        {
          x=a[i]*b[j]+x+c[i+j-1];
          c[i+j-1]=x%10;
          x=x/10;
        }
        c[i+m]+=x;
      }
      int len=n+m;
      while(!c[len]&&len>1)  len--;
      for(int i=len;i>=1;i--)
        cout<<c[i];
      return 0;
    }  

    除法(大数除以int范围的数)

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    #include<ctime>
    #include<cctype>
    #include<cstring>
    #include<string>
    #include<algorithm>
    using namespace std;
    const int N=205;
    char s[N];
    int a[N],n,b,c[N],len=1;
    int main()
    {
      scanf("%s",s+1);
      n=strlen(s+1);
      for(int i=1;i<=n;i++)
        a[i]=s[i]-'0';
      scanf("%d",&b);
      int x=0;
      for(int i=1;i<=n;i++)
      {
        c[i]=(x*10+a[i])/b;
        x=(x*10+a[i])%b;
      }
      while(!c[len]&&len<n)  len++;
      for(int i=len;i<=n;i++)
        cout<<c[i];
      cout<<endl;
      cout<<x<<endl;
      return 0;
    }
  • 相关阅读:
    视觉slam十四讲课后习题ch3-7
    视觉slam十四讲课后习题ch3-6
    视觉slam十四讲课后习题ch3--5题
    (原创)遗传算法C++实现
    (笔记):组合and继承之访问限制(二)
    (笔记):组合and继承之访问限制(一)
    (笔记):初始化列表之初始化顺序
    (笔记):构造函数之初始化列表
    笔记:构造函数易错点
    (笔记):构造函数与析构函数
  • 原文地址:https://www.cnblogs.com/AseanA/p/7244943.html
Copyright © 2011-2022 走看看