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