#C语言
#include <math.h>
#include <stdio.h>
#include <string.h>
void reverse(char a[],int n)
{
int m=n;
char *c=(char*)malloc(sizeof(char)*400);
int i=0;
while (n>=0)
{
c[i]=a[n];
n--;
i++;
}
for(int i=0;i<=m;i++)
{
a[i]=c[i];
}
}
void add(char a[],char b[],int s,int v)
{
int w=0;
char c[800];
int left=0;
while(w<=s||w<=v)
{
if(w<=s&&w<=v)
{
int t_c=(a[w]-'0')+(b[w]-'0')+left;
left=0;
if(t_c>=10)
{
left=1;
c[w]=t_c-10+'0';
}
else c[w]=t_c+'0';
}
else if(w>s&&w<=v)
{
int t_c=+(b[w]-'0')+left;
left=0;
if(t_c>=10)
{
left=1;
c[w]=t_c-10+'0';
}
else c[w]=t_c+'0';
}
else if(w>v&&w<=s)
{
int t_c=(a[w]-'0')+left;
left=0;
if(t_c>=10)
{
left=1;
c[w]=t_c-10+'0';
}
else c[w]=t_c+'0';
}
w++;
}
if(left==1)c[w]='1';
else w--;
for(int j=w;j>=0;j--)
{
printf("%c",c[j]);
}
printf("\n");
}
void sub(char a[],char b[],int s,int v)
{
int w=0;
char c[800];
char lend[400];
char belend[400];
if(s>v)
{
for (int i=0; i<=s; i++)
{
lend[i]=a[i];
}
for (int i=0; i<=v; i++)
{
belend[i]=b[i];
}
}
else if(s<v)
{
printf("-");
int temp=s;
s=v;
v=temp;
for (int i=0; i<=s; i++)
{
lend[i]=b[i];
}
for (int i=0; i<=v; i++)
{
belend[i]=a[i];
}
}
else if(s==v)
{
int flag=0;
//printf("s:%d\n",s);
//printf("lend:%d,belend:%d\n",lend[0],belend[0]);
for(int i=s;i>=0;i--)
{
if(a[i]>b[i])
{
flag=0;
break;
}
else if(a[i]<b[i])
{
flag=1;
break;
}
}
//printf("flag:%d\n",flag);
if(flag==1)
{
printf("-");
int temp=s;
s=v;
v=temp;
for (int i=0; i<=s; i++)
{
lend[i]=b[i];
}
for (int i=0; i<=v; i++)
{
belend[i]=a[i];
}
}
if(flag==0)
{
for (int i=0; i<=s; i++)
{
lend[i]=a[i];
}
for (int i=0; i<=v; i++)
{
belend[i]=b[i];
}
}
}
while(w<=s||w<=v)
{
if(w<=s&&w<=v)
{
//printf("w:%d\n",w);
int t_c=(lend[w]-'0')-(belend[w]-'0');
//printf("t_c:%d,lend:%d,belend:%d",t_c,lend[w],belend[w]);
if(t_c<0)
{
int l=w+1;
while(lend[l]<1)
{
lend[l]=9;
l++;
}
c[w]=t_c+10+'0';
lend[l]=lend[l]-1;
}
else c[w]=t_c+'0';
}
else if(w>v&&w<=s)
{
c[w]=lend[w];
}
w++;
}
w--;
int flag=0;
for(int j=w;j>=0;j--)
{
if(flag==0&&c[j]=='0')
{
continue;
}
else
{
printf("%c",c[j]);
flag=1;
}
}
if (flag==0)
{
printf("0");
}
printf("\n");
}
void mtp(char a[],char b[],int s,int v)
{
int w=0;
char c[800];
int c2[800]={0};
int left=0;
int sum=0;
for(int i=0;i<=s;i++)
{
for(int j=0;j<=v;j++)
{
c2[i+j-1+2]+=(a[i]-'0')*(b[j]-'0');
//if(i+j+1==32)printf("c2[%d+%d+1]:%d,a[%d]:%d,b[%d]:%d\n",i,j,c2[i+j+1],i,a[i]-'0',j,b[j]-'0');
}
}
for (int i=1; i<=s+v+2; i++) {
c2[i]+=left;
left=0;
if(c2[i]>=10)
{
left=c2[i]/10;
c2[i]=c2[i]%10;
}
// printf("i:%d,c2:%d\n",i,c2[i]);
}
if(c2[s+v+2]!=0)printf("%d",c2[s+v+2]);
for (int i=s+v-1+2; i>=1; i--) {
printf("%d",c2[i]);
}
}
int main() {
char a[400];
char b[400];
scanf("%s",a);
scanf("%s",b);
int la=strlen(a)-1;
int lb=strlen(b)-1;
reverse(a,la);
reverse(b,lb);
add(a, b, la, lb);
sub(a, b, la, lb);
mtp(a, b, la, lb);
}
最主要是减法要分清正负,可以先比较两个数大小,大的做被减数小的做减数

京公网安备 11010502036488号