注意判断正负 和进位
ps:swap函数还是挺好用的
#include <iostream> #include<cstdio> #include <vector> #include <sstream> #include <string> #include <cstring> #include <cmath> #include <stack> #include <algorithm> using namespace std; const int MAXL=505; char al[MAXL]; char bl[MAXL]; char cl[MAXL]; int a[MAXL]; int b[MAXL]; int c[MAXL]; int stra; int strb; int ll; /*void output() { for(int i=0;i<stra;i++) { cout<<a[i]<<" "; } cout<<endl; for(int i=0;i<strb;i++) { cout<<b[i]<<" "; } cout<<endl; }*/ void witch() { if(strb>stra) { cout<<"-"; swap(al,bl); } else if(stra==strb) { for(int i=0;i<stra;i++) { if(bl[i]>al[i]) {cout<<"-"; swap(al,bl);} else if(bl[i]<al[i]) break; } } } void input() { scanf("%s",&al); getchar(); scanf("%s",&bl); stra=strlen(al); strb=strlen(bl); witch(); stra=strlen(al); strb=strlen(bl); } void rever() { for(int i=0;i<stra;i++) { a[i]=al[stra-1-i]-‘0‘;/// } for(int i=0;i<strb;i++) { b[i]=bl[strb-1-i]-‘0‘;/// } //output(); } void minis() { ///最后一位前需要判断借位,最后一位后不需要判断吧 ll=max(stra,strb); int temp=0; for(int i=0;i<ll-1;++i) { if(a[i]+temp<b[i]) { c[i]=10+a[i]+temp-b[i]; temp=-1; } else { c[i]=a[i]+temp-b[i]; temp=0; } } c[ll-1]=a[ll-1]+temp-b[ll-1]; } void output() { for(int i=ll-1;i>=0;--i) { if(c[i]==0) ll--; else break; } for(int i=ll-1;i>=0;--i) { cout<<c[i]; } cout<<endl; } int main() { input(); rever(); minis(); output(); return 0; }
原文:http://www.cnblogs.com/weiweiyi/p/5130273.html