周了了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 onlyoffice编辑完后立即下载,下载的不是最新编辑的文档
  • ¥15 求caverdock使用教程
  • ¥15 Coze智能助手搭建过程中的问题请教
  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。