任意两个字符数字的和,该如何解决

任意两个字符数字的和
#include<iostream>
#include <string.h>
using namespace std;
const int MAXLEN=1000;

char a1[MAXLEN];
char a2[MAXLEN];
static int v1[MAXLEN];
static int v2[MAXLEN];
static int v3[MAXLEN];
int i,j,n,L1,L2,z;

int main() 
{
  cin>>a1;
  cin>>a2;
   
  L1=strlen(a1);
  for (i=0;i<L1;i++) 
  v1[i]=a1[L1-1-i]-'0'; //这里为什么要-‘0’  

  L2=strlen(a2);
  for (i=0;i<L2;i++) 
  v2[i]=a2[L2-1-i]-'0';

  for (i=0;i<MAXLEN;i++) 
  v3[i]=v1[i]+v2[i];

  for (i=0;i<MAXLEN;i++) {
  if (v3[i]>=10) {
  v3[i+1]+=v3[i]/10;
  v3[i]=v3[i]%10;
  }
  }

  cout<<a1<<"+"<<a2<<"=";


   
  for (i=MAXLEN-1;i>=0;i--) {
  if(v3[i]!=0) break;
  }
  for(;i>-1;i--){
  cout<<v3[i];
  }
  cout<<endl;
   
   
  return 0;
}


------解决方案--------------------
v1是整型数组,a1是字符串数组
a1所对应的是ascll码值,例如'0'=48,'5'=53
'5'-'0'=5
这样能否理解