程序的非法指令怎么找呀

AAdai 2006-10-01 05:15:35
vc下没问题, wintc123 2有结果但是说有非法指令
高精度乘法
#include<stdio.h>
#include<conio.h>
#define MAX 20000
int strToint(char pA[], int a[]);
int print(int *pA);
int formal(int *pA);
int mul(int *a,int *b,int *c);

void main()
{
int a[MAX];
int b[MAX];
int c[MAX];
char pA[MAX];
char pB[MAX];

scanf("%s",pA);
scanf("%s",pB);
strToint(pA,a);
strToint(pB,b);

mul(a,b,c);

print(c);

}
int strToint(char pA[], int a[])
{
/*将输入数字字符串存入数组中.
输入"4512"
a[]={4,2,1,5,4}其中a[0]为长度.为倒序
*/
int i,j;

for(i = 0; pA[i] ; i++)
;
a[0] = i;
i--;
for(j=1;i>=0;i--)
a[j++] =pA[i] - '0';

return 1;
}
int print(int *pA)
{
int i;

if(NULL == pA)
return 0;
for(i = pA[0]; i >= 1;i--)
printf("%d",pA[i]);

return 1;
}
int formal(int *pA)
{
/*
将数组各位调整为小于9的数,大于9时进位?


*/
int i;
for(i = pA[0]+1; i < MAX;i++)
pA[i] = 0;
for(i = 1;i <= pA[0] || pA[i]>=10; i++)
{
pA[i+1] += pA[i] / 10;
pA[i] = pA[i] % 10;
}
if( pA[i] != 0)
pA[0] = i;

return pA[0];
}
int mul(int *a,int *b,int *c)
{
int i,j,t;

for(i = 0; i < MAX;i++)
c[i] = 0;

for(i = 1; i <= a[0];i++)
{
for(j = 1,t = i;j <= b[0];j++)
c[t++] += a[i] *b[j];
}
c[0] = a[0] + b[0] -1;
formal(c);

return c[0];
}
...全文
182 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
AAdai 2006-10-01
  • 打赏
  • 举报
回复
关于栈溢出能不能具体些呀
测试系统要求是10000位 10000位*10000位需要20000位呀有没有更好的方法呀
0黄瓜0 2006-10-01
  • 打赏
  • 举报
回复

int a[MAX];
int b[MAX];
int c[MAX];
char pA[MAX];
char pB[MAX];

===============
这就是10万字节了。全改为堆分配,或都把MAX定义为1000,都要计算好大的数了。
AAdai 2006-10-01
  • 打赏
  • 举报
回复
2 * 20000 /1024 < 100 k把
说具体些把
那程序应该怎么改进呀
taodm 2006-10-01
  • 打赏
  • 举报
回复
开了100K的数组,栈溢出了。

69,380

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧