杭电1002 代码纪录

能想到的测试数据都试过了,还是没找到被哪条数据卡了,有些困了,于是把代码先留下,回头哪天发现错误后也能给自己警示。

#include <iostream>
#include <string>
using namespace std;

int main(int argc, const char * argv[])
{
    int n, maxLen = 0, minLen = 0, flag;
    string a, b;
    cin >> n;
    for (int i = 1; i <= n; ++i) {
        cin >> a >> b;

        flag = 0;
        if (a.length() < b.length()) {
            string temp = a; a = b; b = temp;
        }
        maxLen = (int)(a.length());
        minLen = (int)(b.length());
        cout << "Case " << i << ":" << endl;

        int sum[maxLen+1];//存放结果的数组
        int k = minLen-1;
        for (int j = maxLen - 1; ; --j) {
            if (j < 0) {//纪录最后是否有进位
                sum[0] = flag;
                break;
            }
            if (k < 0) {//短字符串已遍历完
                if (a[j]-'0' + flag > 9) {
                    sum[j+1] = a[j]-'0' + flag - 10;
                    flag = 1;
                }
                else
                {
                    sum[j+1] = a[j]-'0' + flag;
                    flag = 0;
                }
            }else if (k >= 0){//两个字符串一起遍历
                if (a[j]-'0' + b[k]-'0' + flag > 9) {
                    sum[j+1] = a[j]-'0' + b[k]-'0' + flag - 10;
                    flag = 1;
                }
                else
                {
                    sum[j+1] = a[j]-'0' + b[k]-'0' + flag;
                    flag = 0;
                }
            }
            --k;
        }
        //输出部分
        int i1;
        for (i1 = 0; i1 < a.length()-1; ++i1) {
            if (a[i1] != '0') {
                break;
            }
        }
        for (int i = i1; i < a.length(); ++i) {
            cout << a[i];
        }
        cout << " + ";
        int i2;
        for (i2 = 0; i2 < b.length()-1; ++i2) {
            if (b[i2] != '0') {
                break;
            }
        }
        for (int i = i2; i < b.length(); ++i) {
            cout << b[i];
        }
        cout << " = ";
        int k1 = 0;
        for (k1 = 0; k1 < maxLen; ++k1) {
            if (sum[k1] != 0) {
                break;
            }
        }
        for (int i = k1; i <= maxLen; ++i) {
            cout << sum[i];
        }
        if (i < n) {
            cout << endl;
        }
        cout << endl;
    }
    return 0;
}

希望以后不被这次比较差的命名方式影响。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章