key
检查减数和被减数的大小,大的放前,小的放后 确定结果是正数,还是负数,即符号位 从低位开始减 如果a[i]<b[i],则向高位借1当10,a[i+1]–;a[i]+=10
# include <iostream>
# include <cstring>
using namespace std;
void whoisbig ( int a[ ] , int b[ ] , int * flag) {
if ( a[ 0 ] < b[ 0 ] ) {
* flag= 1 ;
}
if ( a[ 0 ] == b[ 0 ] ) {
int i= a[ 0 ] ;
while ( i> 0 ) {
if ( a[ i] < b[ i] ) {
* flag= 1 ;
break ;
}
-- i;
}
}
}
void a_i ( char * a, int * b) {
b[ 0 ] = strlen ( a) ;
for ( int i= b[ 0 ] ; i> 0 ; -- i) {
b[ b[ 0 ] - i+ 1 ] = a[ i- 1 ] - '0' ;
}
}
int main ( ) {
char s1[ 10090 ] , s2[ 10090 ] ;
int * p, * q;
int a[ 10090 ] , b[ 10090 ] , c[ 10090 ] ;
int flag= 0 ;
scanf ( "%s" , s1) ;
scanf ( "%s" , s2) ;
a_i ( s1, a) ;
a_i ( s2, b) ;
p= a;
q= b;
whoisbig ( p, q, & flag) ;
if ( flag== 1 ) {
p= b;
q= a;
}
c[ 0 ] = max ( a[ 0 ] , b[ 0 ] ) ;
for ( int i= 1 ; i<= c[ 0 ] ; i++ ) {
c[ i] = p[ i] - q[ i] ;
if ( p[ i] < q[ i] ) {
c[ i] += 10 ;
p[ i+ 1 ] -- ;
}
}
while ( c[ c[ 0 ] ] == 0 && c[ 0 ] > 1 ) c[ 0 ] -= 1 ;
if ( flag== 1 )
cout<< "-" ;
for ( int i= c[ 0 ] ; i> 0 ; -- i)
printf ( "%d" , c[ i] ) ;
return 0 ;
}