2013年2月28日 星期四

ACM 10106 Product

大數乘法
這份code寫的真的有夠醜...有點不太想放上來= =

#include <stdio.h>
#include <string.h>

int main(void)
{
    char n1[300], n2[300], rs[600], temp, carry;
    int i, j, len1, len2;

    while (gets(n1) != NULL) {
        gets(n2);

        len1 = strlen(n1);
        len2 = strlen(n2);

        for (i = 0; i < 600; ++i)
            rs[i] = 0;

        for (i = 0; i < len1; ++i)
            n1[i] -= '0';

        for (i = 0; i < len2; ++i)
            n2[i] -= '0';

        for (i = 0; i < len1 / 2; ++i) {
            temp = n1[i];
            n1[i] = n1[len1-i-1];
            n1[len1-i-1] = temp;
        }
        for (i = len1; i < 300; ++i)
            n1[i] = 0;

        for (i = 0; i < len2 / 2; ++i) {
            temp = n2[i];
            n2[i] = n2[len2-i-1];
            n2[len2-i-1] = temp;
        }
        for (i = len2; i < 300; ++i)
            n2[i] = 0;

        for (i = 0; i < 300; ++i) {
            carry = 0;
            for (j = 0; j < 300; ++j) {
                temp = rs[i+j];
                rs[i+j] = (temp + n1[j] * n2[i] + carry) % 10;
                carry = (temp + n1[j] * n2[i] + carry) / 10;
            }
        }

        i = 600-1;
        while (i >= 0 && rs[i] == 0)
            --i;

        if (i < 0)
            printf("0");
        else
            for (; i >= 0; --i)
                putchar(rs[i] + '0');

        printf("\n");
    }

    return 0;
}

沒有留言:

張貼留言