PTA 1074 宇宙无敌加法器 (c++ 思路+全测试点分析)

1074 宇宙无敌加法器 (20 分)

在这里插入图片描述
首先我要说,这道题真坑。。。真坑。。。。
好,下面进入正题。

思路:其实你要说怎么做的话,这道题并不算难。我这里建立了三个字符串类型用于接收输入的三个数。然后从最高位开始以此往下加,其实类似与电路里面的加法器。下面代码注释的很清楚,应该容易看明白,哪里不明白的话可以在下方评论,我看到会回你的。

测试点分析:
首先说1,3这两个点。最后我卡在这两个点好久好久。这两个点就是如果进位数的位数大于两个相加的位数的长度的话,你要怎么处理。比如说输入503 1 2 输出就应该是10而不是0(你可以看我15,16行注释的这两个代码和17,18行的区别)。
然后说2,4这两个点。这两个点比较容易,就是你设置的接收数据的变量类型,考虑不要超出范围了(所以我用的字符串)
最后说5这个点,就是前导0不能输出(我的20~26行代码),还有就是如果结果为0,就要输出0(最后一行代码);

#include <string>
using namespace std;
int main()
{
    string M,A,B;
    int s[1000]={0},t=0;//存放最终结果
    cin>>M>>A>>B;
    int a=A.size()-1,b=B.size()-1,m=M.size()-1,n1,n2,d,x=0;
    for(;a>=0||b>=0;t++,a--,b--,m--)
    {
        n1=a>=0?A[a]-'0':0;//如果A取完了就取0 
        n2=b>=0?B[b]-'0':0;//同A 
        d=m<0||M[m]=='0'?10:M[m]-'0';//m<0是指进位制长度小与输入的相加的位数所以用10进制  
/*        s[t]=(x+n1+n2)%d;//进位数加本位的两个数对进制数取余 
        x=(x+n1+n2)/d;//存放进位数;*/
        s[t+1]=(s[t]+n1+n2)/d;
        s[t]=(s[t]+n1+n2)%d;
    }
    bool flag=false;
    for(;t>=0;t--)
    {
    	if(!flag&&!s[t])	continue;//如果是前导0,则不能输出 
    	if(s[t])	flag=true;
    	cout<<s[t];
	}
    if(!flag)
    	cout<<"0";		
}
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

给个选择

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值