阅读量:1
这里写目录标题
key
- 检查减数和被减数的大小,大的放前,小的放后
- 确定结果是正数,还是负数,即符号位
- 从低位开始减
- 如果a[i]<b[i],则向高位借1当10,a[i+1]–;a[i]+=10
#include <iostream> #include<cstring> using namespace std; //比较两串大小,如果后面大,则flag=1 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);//判断p与q的大小,如果被减数小,则交换 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; }