acwing 791 792 793 794
大数加法
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=1e5+10;
int main()
{
char a[maxn];
char b[maxn];
char c[maxn];
int la,lb;
char x,y;
bool flag;
int k=0;
scanf("%s",a);
scanf("%s",b);
la=strlen(a);
lb=strlen(b);
for(int i=la-1,j=lb-1;i>=0||j>=0;i--,j--)
{
if(i<0)
{
x='0';
}
else
{
x=a[i];
}
if(j<0)
{
y='0';
}
else
{
y=b[j];
}
c[k]=x-'0'+y-'0'+flag;
if(c[k]>=10)
{
c[k]=c[k]-10+'0';
flag=1;
}
else
{
c[k]=c[k]+'0';
flag=0;
}
k++;
}
if(flag==1)
{
c[k++]='1';
}
// printf("%d\n",k);
for(int i=k-1;i>=0;i--)
printf("%c",c[i]);
printf("\n");
return 0;
}
大数减法
#include<stdio.h>
#include<cstring>
#include<algorithm>
#include<string.h>
#include<cmath>
using namespace std;
const int maxn=1e5+10;
void abc(char a[],char b[])
{
int la,lb;
int c[maxn];
int k=0;
char x,y;
bool flag=0;
la=strlen(a);
lb=strlen(b);
for(int i=la-1,j=lb-1;i>=0||j>=0;i--,j--)
{
if(i<0)
x='0';
else
x=a[i];
if(j<0)
y='0';
else
y=b[j];
// printf("%c %c\n",x,y);
c[k]=(x-'0')-(y-'0')-flag;
if(c[k]<0)
{
flag=1;
c[k]=c[k]+10+'0';
}
else
{
flag=0;
c[k]=c[k]+'0';
}
// printf("c[%d] : %c\n",k,c[k]);
k++;
}
// printf("%c %c %c",c[3],c[2],c[1]);
// printf("k : %d",k);
// for(int i=k-1;i>=0;i--)
// printf("%c ",c[i]);
for(int i=k-1;i>=0;i--)
{
if(c[i]=='0')
k--;
else
break;
}
for(int i=k-1;i>=0;i--)
printf("%c",c[i]);
printf("\n");
}
int main()
{
char a[maxn];
char b[maxn];
int la,lb;
scanf("%s%s",a,b);
la=strlen(a);
lb=strlen(b);
if(!strcmp(a,b))
printf("0\n");
else if(la==lb)
{
if(strcmp(a,b)>0)
abc(a,b);
else
{
printf("-");
abc(b,a);
}
}
else if(la>lb)
abc(a,b);
else if(la<lb)
{
printf("-");
abc(b,a);
}
return 0;
}
大数乘法
#include<stdio.h>
#include<cstring>
#include<algorithm>
#include<string.h>
#include<cmath>
#include<vector>
using namespace std;
const int maxn=1e6;
void abc(vector<int>&c,int b)
{
int t=0;
vector<int> d;
for(int i=0;i<c.size()||t;i++)
{
if(i<c.size())
t+=c[i]*b;
d.push_back(t%10);
t/=10;
}
for(int i=d.size()-1;i>=0;i--)
printf("%d",d[i]);
printf("\n");
}
int main()
{
char a[maxn];
int b;
int la;
vector<int>c;
scanf("%s%d",a,&b);
la=strlen(a);
for(int i=la-1;i>=0;i--)
{
c.push_back(a[i]-'0');
}
// printf("%d ",c.size());
// for(int i=0;i<c.size();i++)
// printf("%d ",c[i]);
abc(c,b);
return 0;
}
大数除法
#include<stdio.h>
#include<cstring>
#include<algorithm>
#include<string.h>
#include<cmath>
#include<vector>
using namespace std;
const int maxn=1e6;
void abc(vector<int> c,int b)
{
int r=0;
bool flag=0;
vector<int> d;
for(int i=0;i<c.size();i++)
{
r=r*10+c[i];
d.push_back(r/b);
r%=b;
}
for(int i=0;i<d.size();i++)
{
if(d[i]==0&&!flag)
continue;
else
{
flag=1;
printf("%d",d[i]);
}
}
printf("\n%d\n",r);//输出余数
}
int main()
{
char a[maxn];
int b;
int la;
vector<int>c;
scanf("%s%d",a,&b);
la=strlen(a);
for(int i=0;i<la;i++)
c.push_back(a[i]-'0');
abc(c,b);
return 0;
}