求一下这篇C++的注释,最好能详细一点,多谢多谢谢

求一下这篇C++的注释,最好能详细一点,谢谢谢谢谢
老师给的程序,但是在下学业不精有愧社会,求一下这篇C++的注释,最好能详细一点,感谢感谢,万分感谢
#include <iostream>
using namespace std;
int* sum(int* lis,int* lists,int n){
    int more=0;
int *a;
a=new int[60];
int index=0;
     int array3[256];
    for(int k=n-1;k>=0;k--){
        int sum=lis[k]+lists[k]+more;
       
         if(sum==1){
            array3[index]=1;
            more=0;
        }
      else  if(sum==2){
            array3[index]=0;
            more=1;
        }
       else if(sum==3){
            array3[index]=1;
            more=1;
        }
       else if(sum==0) {
            array3[index]=0;
            more=0;
        }
      index++;
    }
    while(more>0){
        for(int k=0;k<n;k++){
            int sum=array3[k]+more;
            if(sum==0) {
            array3[k]=0;
            more=0;
        }
       else if(sum==1){
            array3[k]=1;
            more=0;
        }
       else if(sum==2){
            array3[k]=0;
            more=1;
        }
       else if(sum==3){
            array3[k]=1;
            more=1;
        }
       }
    }
for(int l=0;l<n;l++){
a[l]=array3[l];

}
    return a;
}

int main(){
    int n;
    int* arr;
int* arra;
int* array;
    int i=0,j=0;
arr=new int[60];
arra=new int[60];
array=new int[60];
cout<<"请输入二进制数的位数";
cin>>n;
cout<<"请输入一个"<<n<<"位二进制数";
for(int r1=0;r1<n;r1++){
cin>>arr[r1];
}
cout<<"请输入一个"<<n<<"位二进制数";
for(int r=0;r<n;r++){
cin>>arra[r];
}
        array=sum(arr,arra,n);
        for(int b=n-1;b>=0;b--){                
            if(array[b]==0)
                array[b]=1;
            else
                array[b]=0;
            cout<<array[b];
        }
       return 0;
}  
------解决思路----------------------
模拟二进制加法, 从个位开始算
------解决思路----------------------
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

------解决思路----------------------

#include <iostream>
using namespace std;
int* sum(int* lis,int* lists,int n)
{
    int more=0;
int *a;
a=new int[60];
int index=0;
    int array3[256];
    
// 从最低位开始计算. 
/*
例如  1010 + 1010
n = 4;
第一次循环 sum = 0 + 0 + 0; array3[0] = 0; more = 0;
第二次循环 sum = 1 + 1 + 0; array3[1] = 0; more = 1;
第三次循环 sum = 0 + 0 + 1; array3[2] = 1; more = 0;
第四次循环 sum = 1 + 1 + 0; array3[3] = 0; more = 1;
*/
for(int k=n-1;k>=0;k--)
{
        int sum=lis[k]+lists[k]+more;
       
        if(sum==1)
{
            array3[index]=1;
            more=0;
        }
else  if(sum==2)
{
            array3[index]=0;
            more=1;
        }
else if(sum==3){
            array3[index]=1;
            more=1;
        }
else if(sum==0) {
            array3[index]=0;
            more=0;
        }
      index++;
    }
// 上面计算完 如果more >0
/*
例:
第一次循环 sum = 0 + 1; array3[0] = 1; more = 0;
第二次循环 sum = 0 + 0; array3[1] = 0; more = 0;
第三次循环 sum = 1 + 0; array3[2] = 1; more = 0;
第四次循环 sum = 0 + 0; array3[3] = 0; more = 0;
*/
    while(more>0){
        for(int k=0;k<n;k++)
{
            int sum=array3[k]+more;
            if(sum==0) 
{
array3[k]=0;
more=0;
}
else if(sum==1){
array3[k]=1;
more=0;
}
else if(sum==2){
array3[k]=0;
more=1;
}
else if(sum==3){
array3[k]=1;
more=1;
}
       }
    }

// 将array3[] 的值赋给a[]
for(int l=0;l<n;l++){
a[l]=array3[l];

}
    return a;
}

int main(){
    int n;
    int* arr;
int* arra;
int* array;
int i=0,j=0;

arr=new int[60];
arra=new int[60];
array=new int[60];

cout<<"请输入二进制数的位数";
cin>>n;

cout<<"请输入一个"<<n<<"位二进制数";

// 将你输入的n位数分别存放在arr中
for(int r1=0;r1<n;r1++)
{
cin>>arr[r1];
}

cout<<"请输入一个"<<n<<"位二进制数";

// 将你输入的n位数分别存放在arra中
for(int r=0;r<n;r++)
{
cin>>arra[r];
}

    array=sum(arr,arra,n);

// 将array 的值 是0的改成1 ; 是1的改成0;
// 从低位开始
/*
例:
array 1010
*/
    for(int b=n-1;b>=0;b--)
{                
        if(array[b]==0)
            array[b]=1;
        else
            array[b]=0;
        cout<<array[b];
    }
// 输出的结果是 1010
   return 0;
}  

------解决思路----------------------
参考这个十进制的加法:

#include <stdio.h>  
#include <string.h>  
#define MAXLEN 1000  
char a1[MAXLEN];  
char a2[MAXLEN];  
static int v1[MAXLEN];  
static int v2[MAXLEN];  
static int v3[MAXLEN];  
int i, j, n, L, z;  
void main(void) {  
    scanf("%d", &n);  
    for (j = 0; j < n; j++) {  
        scanf("%s%s", a1, a2);  
        L = strlen(a1);  
        for (i = 0; i < L; i++) v1[i] = a1[L - 1 - i] - '0';  //下标越小,位数越高  
        L = strlen(a2);  
        for (i = 0; i < L; i++) v2[i] = a2[L - 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] += 1;  
                v3[i] = v3[i] % 10;  
            }  
        }  
        printf("Case %d:\n", j + 1);  
        printf("%s + %s = ", a1, a2);  
        z = 0;  
        for (i = MAXLEN - 1; i >= 0; i--) {  
            if (z == 0) {  
                if (v3[i] != 0) {  
                    printf("%d", v3[i]);  
                    z = 1;  
                }  
            }  
            else {  
                printf("%d", v3[i]);  
            }  
        }  
        if (z == 0) printf("0");  
        printf("\n");  
    }  
    getchar();  
    getchar();  
}  
//Sample Input  
//3  
//0 0  
//1 2  
//112233445566778899 998877665544332211  
//  
//Sample Output  
//Case 1:  
//0 + 0 = 0  
//Case 2:  
//1 + 2 = 3  
//Case 3:  
//112233445566778899 + 998877665544332211 = 1111111111111111110