这是我写的代码 -
#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或者我做错了什么。
答案 0 :(得分:3)
问题是简单的缓冲区溢出。您正在读取150个字符串,但您的字符串缓冲区只有150个字符长 - 没有空间来终止空字符。