HDOJ 1002:C++ 千位數之內的大數加法

編譯環境:MinGW5.1.6數組

1.大數加法函數實現思路函數

1)函數輸入:字符串形式的數字a和bspa

2)翻轉字符串a和b,這樣可使兩個數字的末位對其,利於逐位加法運算code

3)將a和b中各位相加,和賦值到字符串sum對應位中,若是有進位則sum中的下一位自增1ci

4)將字符串a、b、sum翻轉,a和b會翻轉爲它們原來的樣子,sum即數字a與b的和字符串

5)去掉sum前面多餘的0編譯

6)函數輸出:字符串形式的數字sumclass

2.函數體(包括翻轉字符串用的函數Reverse和加法函數Add)循環

///翻轉一個字符串
/*
 *@param char s[] 被翻轉的字符串
 *@return char* 翻轉後的字符串
 */
char* Reverse(char s[])
{
    int i = 0, j = strlen(s) - 1;
    char temp;
    while(i < strlen(s) / 2)
    {
        temp = s[i];
        s[i] = s[j];
        s[j] = temp;
        i++;
        j--;
    }
    return s;
}

///兩個字符串表示的大數的加法運算
/*
 *@param char a[] 加數1
 *@param char b[] 加數2
 *@return char* 和
 */
char* Add(char a[], char b[])
{
    int i, j;
    char* sum = new char[1001];

    //翻轉數組a和b
    Reverse(a);
    Reverse(b);

    //兩數組共有的位
    sum[0] = '0';
    for(i = 0; i < strlen(a) && i < strlen(b); i++)
    {
        sum[i + 1] = '0';
        sum[i + 2] = 0;

        sum[i] += (a[i] - '0') + (b[i] - '0');
        if(sum[i] > '9')
        {
            sum[i] -= 10;
            sum[i + 1] ++;
        }
    }

    //若是a的位數比b多,考慮a的高位
    if(strlen(a) > strlen(b))
    {
        for(i = strlen(b); i < strlen(a); i++)
        {
            sum[i + 1] = '0';
            sum[i + 2] = 0;

            sum[i] += (a[i] - '0');
            if(sum[i] > '9')
            {
                sum[i] -= 10;
                sum[i + 1] ++;
            }
        }
    }
    //若是b的位數比a多,考慮b的高位
    else if(strlen(b) > strlen(a))
    {
        for(i = strlen(a); i < strlen(b); i++)
        {
            sum[i + 1] = '0';
            sum[i + 2] = 0;

            sum[i] += (b[i] - '0');
            if(sum[i] > '9')
            {
                sum[i] -= 10;
                sum[i + 1] ++;
            }
        }
    }

    //翻轉數組sum
    Reverse(sum);
    
    //復原數組a和b
    Reverse(a);
    Reverse(b);
    
    //去掉前面多餘的0
    while(*sum == '0')
    {
        sum += 1;
    }
    return sum;
}

3.函數調用程序

輸入迭代次數times。輸入兩個數a和b,程序返回a與b的和,迭代times次。

int main()
{
    char a[1000], b[1000];

    //指定循環次數
    int counter, times;
    cin >> times;
    for(counter = 1; counter <= times; counter ++)
    {
        //輸入兩個數字並求和
        cin >> a >> b;
        
        cout << "Case " << counter << ':' << endl;
        cout << a << " + " << b << " = " << Add(a, b) << endl;
        
        if(counter != times)
        {
            cout << endl;
        }
    }

    return 0;
}

4.運行結果

END

相關文章
相關標籤/搜索