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遇到无效指令 展开
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遇到无效指令 展开
2个回答
展开全部
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);
}
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位是 字符串结束符。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询