目录

每日一题--有进位的加法运算

目录

【题目描述】

营业额我叫王大锤,昨天还是一名C++老师。万万没想到,我又失业了。昨天上课前我写的程序让整个学校的电脑中了病毒。为了生计,无可奈何,在学校旁边的唐师傅理发店找了一份兼职。

唐师傅理发店已经开张十年有余,生意红火。唐币是一种专门用来唐师傅营业额的,用int以至于long long int已经无法表示唐师傅的总营业额了。而唐师傅又想要计算自开业以来的总营业额。他给了我两个账本和我的第一个任务,能不能获得这份工作,在此一举!

每个账本都已经在最后一页写上了这一时期的总营业额,设计一个程序,计算出它们的和。

【输入】

共2行,每行1个正整数(不超过100位),分别表示每个账本上写着的总营业额(单位:唐币)。

【输出】

       一行,包含一个整数,表示总的营业额。

For example:

Input

Result

1
9

10

答案

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int main()
{
        int a[110]={0},b[110]={0},c[110]={0};
        int i,j,lent,lens,len;
        char s[110],t[110];
        cin >> s >> t;
        lens = strlen(s);
        lent = strlen(t);
        len = max(lens,lent);

        for(i=lens-1,j=0;i>=0;i--,j++) //将s逆序存储到整型组a中
        {
            a[j] = s[i] - '0';
        }

        for(i=lent-1,j=0;i>=0;i--,j++) //将s逆序存储到整型组a中
        {
            b[j] = t[i] - '0';
        }

        for(i=0;i<len;i++)      //进位运算
        {
            c[i] = c[i] + a[i] + b[i];
            if(c[i] > 9)
            {
                c[i+1]++;
                c[i] = c[i] % 10;
            }
        }

        if(c[len]!=0)  //判断最高位是否进位,即计算结果数据长度是否加1
        {
            len++;
        }

        for(i=len-1;i>=0;i--)   //逆序输出
        {
            cout << c[i];
        }

        cout << endl;
        return 0;
}
  • q1为什么要倒序相加?

因为两个相加的数字的位数可能不同,倒序之后可以对齐

  • q2为什么我看不懂一些参数的数值控制,比如len-1…

因为数组是从0开始的,a[0]是第一位,看不懂就自己拿笔写一遍