大数减法
int,long long 的数量级分别为 1e9,1e18,当数据大于18位时无法直接简单的a+b计算,会变成负数。
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int a[505],b[505],c[505];
char st1[505],st2[505],st3[505];
bool compare(char s1[], char s2[])
{
int x = strlen(s1);
int y = strlen(s2);
if(x!=y) return x>y;
else{
int i;
for(i=0;i<x;i++)
if(s1[i]!=s2[i])
return s1[i]>s2[i];
}
}
int main() {
int flag = 0;
scanf("%s%s",st1,st2);
int i,j;
if(!compare(st1,st2))
{
flag = 1;
strcpy(st3,st1);
strcpy(st1,st2);
strcpy(st2,st3);
}
int x = strlen(st1);
int y = strlen(st2);
for(i=0;i<x;i++)
a[x-i] = st1[i] - '0';
for(i=0;i<y;i++)
b[y-i] = st2[i] - '0';
int z = x;
for(i=1;i<=z;i++)
{
if(a[i]<b[i])
{
printf("zcx");
a[i]+=10;
a[i+1] -=1;
}
c[i] = a[i] - b[i];
}
while(c[z]==0&& z>1) z--;
if(flag) printf("-");
for(i=z;i>0;i--)
printf("%d",c[i]);
return 0;
}