C中的150位数字乘法

时间:2014-09-15 20:12:11

标签: c

这是我写的代码 -

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

int main()
{
    char numbr_1[150];
    char numbr_2[150];
    int ansr[22500];
    int i, j, d1, d2, n2, n1, ans, c, l1, l2, fl = 22500, temp1 = 0, temp2 = 0;
    clrscr();
    printf("Enter 1st number");
    gets(numbr_1);
    printf("Enter 2nd number");
    gets(numbr_2);

    l1 = strlen(numbr_1);
    l2 = strlen(numbr_2);

    for (i = 0; i < fl; i++)
        ansr[i] = 0;

    c = 0;

    for (i = l1 - 1; i >= 0; i--) {
        for (j = l2 - 1; j >= 0; j--) {

            n1 = numbr_1[i] - 48;
            n2 = numbr_2[j] - 48;
            ans = n1 * n2;

            temp2 = fl - c - (l2 - j);
            ansr[temp2] += ans;
            while (ansr[temp2] > 9) {
                temp1 = ansr[temp2];
                ansr[temp2] = ansr[temp2] % 10;
                ansr[temp2 - 1] += temp1 / 10;
                temp2--;
            }
        }
        c++;
    }

    i = 0;

    while (ansr[i++] == 0);

    for (j = --i; j < fl; j++)
        printf("%d", ansr[j]);

    getch();
    return (1);
}

它适用于低于22500位的答案,它甚至适用于22499位数字,即149位数字* 150位数字 我只是想知道这是一些无能为力还是C或者我做错了什么。

1 个答案:

答案 0 :(得分:3)

问题是简单的缓冲区溢出。您正在读取150个字符串,但您的字符串缓冲区只有150个字符长 - 没有空间来终止空字符。