4種高精度

~高精度,常用的輔助~一般做子函數用~

1.加法

#include<iostream> 
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<ctime>
#include<cctype>
using namespace std;

int a[305],b[305],c[305],i,j,n,m,x,k;
char s[305];

int main()
{
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));

    cin>>s;
    n=strlen(s);

    for(i=0;i<=n;++i)
        a[n-i]=s[i]-'0';

    cin>>s;
    m=strlen(s);

    for(i=0;i<=m;++i)
        b[m-i]=s[i]-'0';

    if(m>n) n=m;

    for(i=1;i<=n;++i)
    {
        x=a[i]+b[i]+x;
        c[i]=x%10;
        x=x/10;
    }

    if(x>0)
    {
        ++n;
        c[n]=x;
    }

    for(i=n;i>=1;--i)
        cout<<c[i];

    return 0;
}

2.減法

#include<iostream> 
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<ctime>
#include<cctype>
using namespace std;

int a[305],b[305],c[305],i,j,n,m,x,k;
char s[305],t[305];

int main()
{   
    memset(a,0,sizeof(a));              
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));

    scanf("%s",s);
    n=strlen(s);
    for(i=0;i<=n;i++) a[n-i]=s[i]-'0';

    scanf("%s",t);
    m=strlen(t);
    for(i=0;i<=m;i++) b[m-i]=t[i]-'0';

    if(n<m || n==m && strcmp(s,t)<0)
    {
        printf("-");
        for(i=1;i<=m;i++) swap(a[i],b[i]);
        swap(n,m);
    }

    for(i=1;i<=n;i++)
    {
        x=10+a[i]-b[i];
        c[i]=x%10;
        a[i+1]=a[i+1]+x/10-1;
    }

    while(n>1 && c[n]==0) n--;

    for(i=n;i>=1;i--)
    printf("%d",c[i]);

    return 0;
}

3.乘法

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cctype>
#include<cstdlib>
#include<string>
#include<cstring>
#include<ctime>
#include<algorithm>
using namespace std;

int a[300],b[300],c[500],n,m,len;
char s[300];

int main()
{
  int i,j,k,x,y;
  //freopen("in.txt","r",stdin);
  //freopen("out.txt","w",stdout);  
  memset(a,0,sizeof(a));
  memset(b,0,sizeof(b));
  memset(c,0,sizeof(c));

  cin>>s;
  n=strlen(s);
  for(i=0;i<n;i++)a[n-i]=s[i]-'0';

  cin>>s;
  m=strlen(s);
  for(i=0;i<m;i++)b[m-i]=s[i]-'0';

  for(i=1;i<=n;i++)                   
    {
      x=0;                          
      for(j=1;j<=m;j++)
        {
          x=x+a[i]*b[j]+c[i+j-1];    
          c[i+j-1]=x % 10;           
          x=x/10;                    
        };
      c[i+m]=c[i+m]+x;              
    }

  len=n+m;                          

  while(len>1 && c[len]==0) len--;  

  for(i=len;i>0;i--)                 
     cout<<c[i];
  return 0;
}

4.1.除法(int範圍的)

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<string>
#include<cstring>
#include<ctime>
using namespace std;


int main()
{
  //freopen("in.txt","r",stdin);
  //freopen("out.txt","w",stdout);

  int a[300],b[300],i,j,n,m,x;
  char s[300];
  memset(a,0,sizeof(a));
  memset(b,0,sizeof(b));

  cin>>s;   
  n=strlen(s);   
  for(i=0;i<n;i++) a[i]=s[i]-'0';  
  cin>>m;

  x=0;
  for (i=0;i<n;i++)    
   {
     b[i]=(x*10+a[i])/m;
     x=(x*10+a[i]) % m;
   }

  j=1;
  while ((b[j]==0) && (j<n-1)) 
  j++;    

  for (i=j;i<n;i++) 
  cout<<b[i];  

  printf("\n");
  printf("%d\n",x);

  return 0;
}
發佈了43 篇原創文章 · 獲贊 8 · 訪問量 8179
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章