代碼如下:
#include"stdlib.h"
#include"malloc.h"
int *add(int *a,int *b)
{
int digit1=_msize(a)/4;
int digit2=_msize(b)/4;
int digit=_msize(a)/4>=_msize(b)/4?_msize(a)/4:_msize(b)/4;
printf("enter:a=");
for(int i=0;i<digit1;i++)
printf("%d",a[i]);
printf(" b=");
for(int i=0;i<digit2;i++)
printf("%d",b[i]);
int *re=(int *)calloc(digit+1,4);
int *d=(int *)calloc(digit+1,4);
int *e=(int *)calloc(digit1,4);
for(int i=0;i<digit2;i++)
e[i]=b[i];
for(int i=0;i<digit;i++)
{
d[i+1]=(a[i]+e[i])/10;
re[i]=(a[i]+e[i]+d[i])%10;
}
re[digit]=d[digit];
free(d);
free(e);
if(re[digit]==0)
{
realloc(re,digit*4);
printf(" out: ");
for(int i=0;i<digit;i++)
printf("%d",re[i]);
printf("\n");
return re;
}
else
{
printf(" out:");
for(int i=0;i<digit+1;i++)
printf("%d",re[i]);
printf("\n");
return re;
}
}
void main()
{
int *fr=(int *)malloc(sizeof(int));
fr[0]=1;
int *af=(int *)malloc(sizeof(int));
af[0]=1;
while(true)
{
int *temp=fr;
fr=af;
af=add(af,temp);
if(_msize(af)/4==1000)
{
for(int j=0;j<(_msize(af)/4);j++)
printf("%d",af[j]);
break;
}
}
}
任務是找出首個達到1000位的斐波那契數。
數太大,不可能直接操作,我用數組來表示數,方便起見我將數倒著存入數組。
但是呢我運行了幾次,前面都沒問題,運行到814491和393021(對應數為194481和1210393)就卡住不動了~求問怎麼回事呢?
#include"stdio.h"
#include"stdlib.h"
#include"malloc.h"
#include"string.h"
void Add(char a[],char b[],char d[])
{
char c[1200];
int lena=strlen(a),lenb=strlen(b);
int i,len;
len=lena>lenb?lena:lenb;
len++;
c[0]='\0';
for(i=1;i<=len;i++)c[i]='0';
for(i=1;i<=lena;i++)c[i]+=a[lena-i]-48;
for(i=1;i<=lenb;i++)c[i]+=b[lenb-i]-48;
for(i=0;i<=len;i++)
if(c[i]>57)
{
c[i]-=10;
c[i+1]++;
}
for(i=len;i>1;i--)
if(c[i]==48)len--;
else break;
for(i=0;i<=len;i++)
d[i]=c[len-i];
}
void main()
{
char a[1200];
char b[1200];
char c[1200];
a[0] = '1';
a[1] = '\0';
b[0] = '1';
b[1] = '\0';
int i = 3;
while (true)
{
Add(a, b, c);
if (strlen(c) >= 1000) break;
i++;
strcpy(a, b);
strcpy(b, c);
}
printf("%d\n", i);
printf("%s\n", c);
}