周了了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 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据