牛客小白月赛30_E:牛牛的加法(思维)

10 篇文章 0 订阅
9 篇文章 0 订阅

链接https://ac.nowcoder.com/acm/contest/9667/E

题目
牛牛经常在数学课上睡觉,所以他的数学非常烂。
别人的数学都是进位加法, 但是他的却是非进位加法,比如 7+7 = 4, 22+84 = 6
现在牛牛想考验你一下, 给你两个非常大的数,计算他们的和。

输入
第一行一个整数 a ( a ≥ 0 and |a| ≤ 2e5);
第二行一个整数 b ( b ≥ 0 and |b| ≤ 2e5);

输出
输出一个数 c , c = a + b

思路
状态不佳,在最后半小时才看这个题的,跟A怼上了,问题有点大。
在这里插入图片描述
这个题首先值得注意的是数据范围:

第一行一个整数 a ( a ≥ 0 and |a| ≤ 2e5);
第二行一个整数 b ( b ≥ 0 and |b| ≤ 2e5);

请注意,这里的绝对值号的意思,其实是指a,b的长度,所以开long long的可以拉出去枪毙了(●’◡’●)。
所以这里我想到的是用string存储。

string a,b;
cin>>a>>b;

那么我们再来看这个RZ的牛牛是怎么计算的:

7+7=4
22+84=6

按照正常的思路,7+7=14,22+84=106。我们把两个放在一起看一下会发现:
第一个式子里,(7+7)%10=4,这就得到了RZ人的答案;
第二个式子里,个位上(4+2)%10=6,十位上(2+8)%10=0,由于是前缀0被省略了,所以答案是6。

心机子娃一直摸你肚子,真相就是:’
牛牛眼里的两个数相加,其实是个位对齐之后每个位置相加再对10取余,然后输出这个结果!
在这里插入图片描述
知道这个之后还要考虑两个点:前缀0和全是0(例如88+22)。
这两个如此简单,相信聪明的你一定能够想出解决方案,我们直接看代码。

「伊丽莎白」!

在这里插入图片描述

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    string a,b;
    string ss;
    int n,m;
    cin>>a>>b;
    int len1=a.size()-1,len2=b.size()-1;
    while(len1>=0||len2>=0)    //考虑三种情况:10001+99,99+99,12+11122
    {
        if(len1<0)
            n=0;
        else
            n=a[len1]-'0';
        if(len2<0)
            m=0;
        else
            m=b[len2]-'0';
        int ans=(n+m)%10;
        ss+=(ans+'0');
        len1--,len2--;
    }
    //ss中存储的数其实是倒序的
    //比如111+123,ss中就会是:432,答案应该是234
    //自己可以根据喜好调整
    int k=-1;
    for(int i=ss.size()-1; i>=0; i--)  //找前缀0,找到第一个不为0的位置,从那个位置开始输出
    {
        if(ss[i]!='0')
        {
            k=i;
            break;
        }
    }
    if(k==-1)      //k=-1说明全是0,输出一个就好
        cout<<0<<endl;
    else
    {
        for(int i=k;i>=0;i--)
            cout<<ss[i]-'0';
        cout<<endl;
    }
}

我其实还好(T_T)

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值