您的位置:首页 > 其它

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

2017-10-15 03:14 302 查看
水题一道,就是加法进制的实际模拟。

核心的易错点在于如何忽略掉结果前面的无意义的‘0’。

自己之前写的:

int k = 0;
while(!ans.empty()){
if(k||ans.top()==0) cout << ans.top(); key=1;
ans.pop();
}


看似没有问题,其实也忽略了结果是0的时候。

所以以后做题边界和0永远都要特殊检查。

// 2017/10/14 NCU
// PAT-B 1074
// scienceZ
#include <cstdio>
#include <stack>
#include <cstring>
#include <iostream>
using namespace std;

char arr1[30];
char arr2[30];
char arr3[30];
stack<int> ans;

int main()
{
cin >> arr1 >> arr2 >> arr3;
int l1, l2, l3;
l1 = strlen(arr1)-1;;
l2 = strlen(arr2)-1;
l3 = strlen(arr3)-1;
int j = 0, sum = 0;
while(1){
if(l1<0 && !j) break;
sum+=j;
if(l2!=-1) { sum+=arr2[l2]-'0'; l2--;}
if(l3!=-1) { sum+=arr3[l3]-'0'; l3--;}
if (l1!=-1 && sum >= arr1[l1]-'0'&& arr1[l1]!='0'){
sum-=arr1[l1]-'0';
ans.push(sum);
j = 1;
sum = 0;
}else if(l1!=-1 && sum >= 10 && arr1[l1]=='0'){
sum-=10;
ans.push(sum);
j = 1;
sum = 0;
}else{
ans.push(sum);
j = 0;
sum = 0;
}
l1--;
}

int key = 0;

while(ans.size()>1&&ans.top()==0){
ans.pop();
}

while(!ans.empty()){
cout << ans.top(); key=1;
ans.pop();
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: