eg:计算10002-99的差
①
#include "stdio.h" #include "string.h" #include "algorithm" #define N 3005 using namespace std; int cmp(char a[],char b[]) //比较两个数大小 { //如果 a>b返回1,a=b返回0,a<b返回-1 int lena=strlen(a); int lenb=strlen(b); if(lena>lenb)return 1; if(lena==lenb)return strcmp(a,b); if(lena<lenb)return -1; } void sub(char a[],char b[],char c[]) { int t,i,r=0; int res=cmp(a,b); if(res<0) //如果第一个数小,需要交换 { strcpy(c,a); strcpy(a,b); strcpy(b,c); } else if(res==0) //如果相等直接跳出 { strcpy(c,"0"); return; } strrev(a); //逆序 strrev(b); //逆序 for(i=0;b[i]!=‘\0‘;i++) //低位至高位 { t=(a[i]-‘0‘-r)-(b[i]-‘0‘); //每位上的相减 if(t<0) { r=1; //向高位借1 t=t+10; } else r=0; //不借位 c[i]=t+‘0‘; //结果转换为字符 } for(;a[i]!=‘\0‘;i++) //a中剩下的还需考虑借位 { t=a[i]-‘0‘-r; if(t<0) { r=1; t=t+10; } else r=0; c[i]=t+‘0‘; } while(c[i-1]==‘0‘) //去除前导0 i--; if(res<0) //若结果为负 c[i++]=‘-‘; c[i]=‘\0‘; //结尾 strrev(c); //逆序回正常 } int main() { char a[N],b[N],c[N]; scanf("%s %s",a,b); sub(a,b,c); puts(c); return 0; }