~高精度,常用的輔助~一般做子函數用~
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;
}