算法复习——高精度集合

加法:

#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;
}

 

posted @ 2017-07-27 15:06  AseanA  阅读(200)  评论(0编辑  收藏  举报