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;
    }
  • 相关阅读:
    谷歌地球服务器"失联"的替代方案
    Win32Api -- 回到Windows桌面
    WPF -- 应用启动慢问题
    Windows -- 多网卡上网设置
    .Net -- ConfigurationSection的简单使用
    WPF -- 使用RenderTargetBitmap将Canvas保存为图片
    WPF -- 使用当前进程打开自定义文件的一种方式
    WPF源码阅读 -- InkCanvas选中笔迹
    WPF源码阅读 -- InkCanvas选择模式
    WPF -- 使用Blend工具绘制Control样式
  • 原文地址:https://www.cnblogs.com/AseanA/p/7244943.html
Copyright © 2011-2022 走看看