#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define Maxsize 100
#define DataType int
typedef struct
{
DataType data[Maxsize];
int top;
}Seqstack,*PSeqstack;
PSeqstack Init_Seqstack()//初始化堆疊
{
PSeqstack S;
S=(PSeqstack)malloc(sizeof(Seqstack));
if(S)
S->top=-1;
return S;
}
int Empty_Seqstack(PSeqstack S)//判堆疊空
{
if(S->top==-1)
{
return 1;
}else
return 0;
}
int Push_PSeqstack(PSeqstack S,DataType x)//進堆疊
{
if(S->top==Maxsize-1)
{
return 0;
}else
{
S->top++;
S->data[S->top]=x;
return 1;
}
}
int Pop_PSeqstack(PSeqstack S,DataType* x)//出堆疊
{
if(Empty_Seqstack(S))
return 0;
else
{
*x=S->data[S->top];
S->top--;
//printf("%d",*x);
return 1;
}
}
void High_precision_multiplication(int a[],int b[],int minlen,int maxlen)
{
printf("成功進入=========================\n");
PSeqstack c,d;
int a1=0,a2=0;
c=Init_Seqstack();
d=Init_Seqstack();
int result[Maxsize]={0};
for(int i=0;i<maxlen;i++)//進堆疊----->先進后出
{
Push_PSeqstack(c,a[i]);
}
for(i=0;i<minlen;i++)
{
Push_PSeqstack(d,b[i]);
}//將資料壓入c,d堆疊兩個堆疊結構--->怎么輸入的就怎么壓入堆疊結構
// int top=c->top;
// printf("%d=======\n",c->top);
for(i=0;i<maxlen;i++)
{
Pop_PSeqstack(d,&a2);
c->top=top;
// printf("%d\n",c->top);
for(int j=0;j<minlen;j++)
{
Pop_PSeqstack(c,&a1);
result[i+j]+=a1*a2;
printf("1.第%d次%d\n",j,result[i+j]);
result[i+j+1]+=result[i+j]/10;
printf("2.第%d次%d\n",j,result[i+j+1]);
result[i+j]=result[i+j]%10;
printf("3.第%d次%d\n",j,result[i+j]);
printf("+++++++++%d\n",c->top);
}
}
int len=minlen+maxlen;
while(result[len-1]==0&&len!=1)
{
len--;
}
for(i=len-1;i>=0;i--)
{
printf("%d",result[i]);
}
printf("\n");
}
void main()
{
char a[Maxsize],b[Maxsize],temp[Maxsize];
int minlen,maxlen;
int c[Maxsize],d[Maxsize];
while(true)
{
printf("請輸入第一個字串:");
scanf("%s",a);
printf("請輸入第二個字串:");
scanf("%s",b);
if(strlen(a)>=strlen(b))
{
minlen=strlen(b);
maxlen=strlen(a);
}else
{
maxlen=strlen(b);
minlen=strlen(a);
}
if(strcmp(b,a)>0)//換成a大b小
{
strcpy(temp,a);
strcpy(a,b);
strcpy(b,temp);
}
for(int i=0;i<maxlen;i++)//c大,d小
{
c[i]=a[i]-'0';
d[i]=b[i]-'0';
}
High_precision_multiplication(c,d,minlen,maxlen);
}
}
我就想問為什么c->top=top這一局用處是什么,
我去掉這句程式運行結果就會不正確,但我不知道這行代碼有什么用,我知道他是將c->top重置為最初始的時候的值,有什么用?我猜想他是會影響進位,就是不知道為什么




轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/283863.html
標籤:C++ 語言
上一篇:C語言兩個數的最小公倍數
下一篇:c語言鏈表出現段錯誤怎么解決
