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

135 阅读1分钟

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;
}