C语言 cpu遇到无效指令 问题

#include<stdio.h>main(){inti,j,k;inth=0,flag=0;inttemp;chara[50]={0},b[50]={0};intc[1... #include<stdio.h>
main()
{
int i,j,k;
int h=0,flag=0;
int temp;
char a[50]={0},b[50]={0};
int c[100]={0};
clrscr();
scanf("%s%s",a,b);
for(i=0;i<50;i++)
{
for(j=0;j<50;j++)
{
temp=(a[j]-'0')*(b[i]-'0');
do
{
c[i+j+h]+=temp;
if(c[i+j+h]>9)
{
temp=c[i+j+h]/10;
c[i+j+h]=c[i+j+h]-temp*10;

}
else
{
flag=1;
}
h++;
}
while(flag!=1);
}
}

for(k=0;k<100;k++)
{
printf("%d",c[k]);
}

}

两个大数相乘的程序 编译通过 输过两个数字就报cpu遇到无效指令
展开
 我来答
wanghao2004
2012-06-05 · 超过14用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:37.9万
展开全部
c[i+j+h]+=temp? 0 <= i <= 49 0 <= j <= 49 所以 0 <= (i + j) <= 99。 所以c的下标i + j + h有可能超过100,你看c的定义是int C【100】,所以数组有可能溢出,溢出后修改了栈上的数据,特别是修改了函数的返回地址,当程序执行忘后,程序就返回到了莫名其妙的地方
金色潜鸟
2012-05-31 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5633万
展开全部
i,j 不应给50:
for(i=0;i<strlen(b);i++)
for(j=0;j<strlen(a);j++)
还有别的错。

给你一个程序:
#include<stdio.h>
#include<string.h>
#define MAX_DIGITS 100
void mulBigInteger(char*mulor,char*mulant,char*result);

int main(){
char mulor[MAX_DIGITS+1];
char mulant[MAX_DIGITS+1];
char result[2*MAX_DIGITS+1];
char *ptor = mulor;
char *ptant = mulant;
printf("%s\n","input one number");
scanf("%s",mulor);
printf("%s\n","input another number");
scanf("%s",mulant);
printf("mulor = %s,", mulor);
printf("mulant = %s\n" ,mulant);
mulBigInteger(mulor,mulant,result);
printf("%s * %s = %s",mulor,mulant,result);

return 0;
}

void mulBigInteger(char*mulor,char*mulant,char*result){
char one[MAX_DIGITS];
char two[MAX_DIGITS];
char rel[2*MAX_DIGITS];
int pro[2*MAX_DIGITS];
int row = strlen(mulant); // Chengshu 735091890625
int col = strlen(mulor); // Beichengshu 735091890625
int pos =0;
int i,j;
strcpy(one,mulor);
strcpy(two,mulant);

for (i=0;i<2*MAX_DIGITS;i++)
pro[i]=0;

for(i = row-1; i >=0; i--)
for(j = col-1 ; j >= 0; j--)
{
int product = (one[j]-'0')*(two[i]-'0');
pro[i+j+0] += product/10 ;
pro[i+j+1] += product%10 ;
}

for(i = row+col-1; i>0;i--)
{
if(pro[i]>=10)
{
pro[i-1] +=pro[i]/10;
pro[i] =pro[i]%10;
}
}

for(i = 0;i<row +col;i++)
if (pro[i]!= 0)
{
pos = i;
break;
}
printf("\n pos =%d\n",pos);
for(i = 0,j = pos;i<row +col;i++,j++)
rel[i] = pro[j]+'0';
rel[row+col]='\0';
strcpy(result,rel);
}
追问
你好 我设定的两个数字不大于50位数 所以我给的50 忘了说了

谢谢 能帮我调试下吗 这个我看不懂 帮我看下哪里错了 谢谢了
追答
i,j 不应给50. 除非你规定输入数必须是50位。应当用 strlen(a),strlen(b) 计算位数。
另外,a[50] 只能放49位,最后添1位是 字符串结束符。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式