周了了yang 2022-09-25 11:06 采纳率: 100%
浏览 21
已结题

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

怎么简化函数

#include<cstdio>
#include<iostream>
#include<cstdio>
#include<string>
//字符串数组是从后往前储存,最后一个下标为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不明确

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

  • 写回答

1条回答 默认 最新

  • 游坦之 全栈领域优质创作者 2022-09-25 13:02
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月11日
  • 已采纳回答 10月3日
  • 创建了问题 9月25日

悬赏问题

  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 前端echarts坐标轴问题
  • ¥15 CMFCPropertyPage
  • ¥15 ad5933的I2C
  • ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
  • ¥15 数学建模求思路及代码
  • ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题
  • ¥15 谁会P4语言啊,我想请教一下
  • ¥15 这个怎么改成直流激励源给加热电阻提供5a电流呀
  • ¥50 求解vmware的网络模式问题 别拿AI回答