大数加法 大数乘法

#include
#include
#include

#define MAXLEN 300//大数的长度

using namespace std;

int Input(char n[])//将大数读入的函数
{
    char s[MAXLEN];
    int i, l;

    for (i = 0; i < MAXLEN; i++)
        n[i] = 0;
    if (scanf("%s", s) < 1) 
        return -1;

    l = strlen(s);
    for (i = 0; i < l; i++) //将输入的大数逆置
        n[i] = s[l - i - 1] - '0';

}
int Print(char n[])
{
    int i;
    for (i = MAXLEN - 1; i > 0; i--)
        if (n[i] != 0) 
            break;
    for (; i >= 0; i--)
        printf("%d", n[i]);
    printf("\n");
    return 0;
}

void Add(char a[], char b[], char c[])//大数加法
{
    int i = 0;
    for (i = 0; i < MAXLEN; i++)
        c[i] = a[i] + b[i];
    for (i = 0; i < MAXLEN; i++) //处理进位
    {
        if (c[i] >= 10)
        {
            c[i + 1] += c[i] / 10;
            c[i] = c[i] % 10;
        }
    }
}
void Mul(char a[], char b[], char c[])//大数乘法
{
    int i, j;
    int alen = strlen(a), blen = strlen(b);
    for (i = 0; i < MAXLEN; i++) c[i] = 0;
    for (i = 0; i < alen; i++)
        for (j = 0; j < blen; j++) //处理进位
        {
            c[i + j] += a[i] * b[j];
            if (c[i + j] >= 10)
            {
                c[i + j + 1] += c[i + j] / 10;
                c[i + j] %= 10;
            }
        }
}

int main()
{

    char a[MAXLEN], b[MAXLEN], c[MAXLEN];
    Input(a);
    Input(b);
    Add(a, b, c);
    Print(c);
    Mul(a, b, c);
    Print(c);

    getchar();
    getchar();
    return 0;
}

你可能感兴趣的:(算法)