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

希望以後不被這次比較差的命名方式影響。

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