怎么简化函数中的重复代码

怎么简化函数

#include
#include
#include
#include
//字符串数组是从后往前储存,最后一个下标为0,往前
using namespace std;
string s1, s2, s;
int a[11000], b[11000]; 

void rem()
{
    {
        cin >> s1 >> s2;
        //scanf("%s%s", &s1[0], &s2[0]);
        int len1 = s1.size();
        int len2 = s2.size();

        int len = max(len1, len2);
        for (int i = 0; i < len1; i++)
        {
            a[len1 - i] = s1[i] - '0';//char转为int要-48 0对应ASCII为48,从后往前储存
        }
        for (int i = 0; i < len2; i++)
        {
            b[len2 - i] = s2[i] - '0';//从后往前储存
        }

    }
}

void plus()
{
    cin >> s1 >> s2;
    int len1 = s1.size();
    int len2 = s2.size();
    int len = max(len1, len2);
    rem();
    int m = 0;//进位
    for (int i = len; i >= 1; i--)//输入是从后往前输入
    {
        a[i] = a[i] + b[i] + m;//c[i]只存个位数
        m = a[i] / 10;
        a[i] = a[i] % 10;
    }
    while (len > 1 && a[len] == 0)
    {
        len--;
    }
    if (m == 1)//进位还剩1
    {
        //c[++len] = 1;必须是前置递增
        //len=len=1;
        //c[len] = 1;
        a[len + 1] = 1;
    }
}

void plus2()
{
    cin >> s1 >> s2;
    int len1 = s1.size();
    int len2 = s2.size();
    int len = max(len1, len2);

    for (int i = len; i >= 1; i--)a[i] = a[i] + b[i];//c没用了   
    for (int i = 1; i <= len; i++)//输入是从后往前输入
    {
        a[i + 1] = a[i + 1] + a[i] / 10;
        a[i] = a[i] % 10;
    }
    while (len > 1 && a[len] == 0)
    {
        len--;
    }
    for (int i = len; i >= 1; i--)
    {
        printf("%d", a[i]);
    }

}

int sub()
{

    cin >> s1 >> s2;
    int len1 = s1.size();
    int len2 = s2.size();

    if (s1 == s2)
    {
        printf("0");
        return 0;
    }
    if (len1 < len2 || len1 == len2 && s1 < s2)//len1 < len2 或者 len1 = len2并且s1 < s2
    {
        printf("-");
        s = s1;
        s1 = s2;
        s2 = s;
        swap(len1, len2);//交换长度
    }

    int len = max(len1, len2);//交换完之后再取最长
    for (int i = 1; i <= len; i++)
    {
        if (a[i] < b[i])
        {
            a[i + 1] = a[i + 1] - 1;
            a[i] = a[i] + 10;
        }
        a[i] = a[i] - b[i];
    }

    while (len > 1 && a[len] == 0)
    {
        len--;
    }

    for (int i = len; i >= 1; i--)
    {
        printf("%d", a[i]);
    }

}



int main()
{
    plus();


    return 0;
}




plus不明确

函数重复的太多了,有没有办法简化一下,谢谢

你这个问题非常的好,其实你的问题,以前那些很伟大的人也提出来过,这里面涉及的东西很多,如里氏代换原则、开闭原则....
我粗略看了一下你的Plus,你确定你的代码没问题?