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

来源:互联网 发布:忾乎天下 编辑:程序博客网 时间:2024/04/29 23:17

水题一道,就是加法进制的实际模拟。
核心的易错点在于如何忽略掉结果前面的无意义的‘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;}                          
原创粉丝点击