大整数相乘代码功能不懂



#include 
using namespace std;
int main(){
string str1,str2;//先用两个串储存数
cin>>str1>>str2;
int len1 = str1.size();//求出串的长度
int len2 = str2.size();

// 分配一个空间,用来存储运算的结果,str1长的数 * str2长的数,结果不会超过str1+str2长
int a[len1 + len2];
fill(a, a + len1 + len2, 0);//fill()函数填充0

for (int i = 0; i < len1; i++)
    for (int j = 0; j < len2; j++) 
        a[len1 + len2 - i - j - 2] += (str1[i] - '0') * (str2[j] - '0');    
//不是-1而是-2,因为可能产生进位,留一位给最后的进位 

//单独处理进位
for (int i = 0; i < len1 + len2 - 1; i++){
    a[i + 1] += a[i] / 10;
    a[i] %= 10;
}

int r = len1 + len2 - 1;//逆序输出 
while(a[r]==0 && r>0) r--;//循环排除多余0 

for (;r >= 0;r--)
    cout<return 0;}

请问这几行代码功能是啥,看不懂



for (int i = 0; i < len1; i++)
        for (int j = 0; j < len2; j++) 
            a[len1 + len2 - i - j - 2] += (str1[i] - '0') * (str2[j] - '0');    

这个就是模仿人的列竖式手算的过程中的上下每一行对齐相加
str1[i] - '0'
这里是把ascii字符形式的数字通过减去'0'得到数值。