1074 宇宙无敌加法器 (20 分)(测试点五)

本文介绍了如何解决一道编程题目——宇宙无敌加法器,涉及不同进制下的数字相加。文章通过算法分析、代码实现及测试点说明,解释了处理进制转换和进位问题的关键步骤,特别提到了处理前导零的注意事项,并提供了修正后的代码片段。
摘要由CSDN通过智能技术生成

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

题目链接

算法分析

用一个数组存进制,用两个数组存运算的数字,然后从低到高一位一位处理就好。

测试点

我卡在了测试点五,我考虑了删除前导0的情况,不过没完全考虑
因为:至少要保留一位!!!
在这里插入图片描述
修改起来也比较容易

while(!ans[cnt]) cnt --;
改为->
while(!ans[cnt] && cnt > 1) cnt --;

代码实现

#include<bits/stdc++.h>
using namespace std;
#define N 25
int chge[N], a[N], b[N], ans[N];
int at, bt;
int cnt;
int init(int num[]){
	int t = 0;
	string s;
	cin>> s;
	int len = s.size();
	for(int i = len - 1; i >= 0; -- i)
		num[++ t] = s[i] - '0';
	return t;
}
int main(){
	init(chge);
	at = init(a);
	bt = init(b);
	int mx = max(at, bt);
	int last = 0;//进位
	for(int i = 1; i <= mx; ++ i){
		int cal = a[i] + b[i] + last;
		if(!chge[i]){
			ans[++ cnt] = cal % 10;
			last = cal / 10;
		}
		else{
			ans[++ cnt] = cal % chge[i];
			last = cal / chge[i];		
		}
	}
	if(last) ans[++ cnt] = last;
	while(ans[cnt] >= 10){//考虑最高位进位
		int x = ans[cnt] / 10;
		ans[cnt] %= 10;
		ans[++ cnt] = x;
	}
	while(!ans[cnt] && cnt > 1) cnt --//删除前导0
	for(int i = cnt; i >= 1; -- i)
		printf("%d", ans[i]);
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Crer_lu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值