这个算法哪里有问题?

来源:百度知道 编辑:UC知道 时间:2024/05/24 16:36:24
/* 2^64 */
#include "stdio.h"
#include "string.h"
main()
{
int a[20];
char b[20];
int i,j=1,k;
for(i=0;i<20;i++)
a[i]=10;
for(a[19]=1;j<=64;j++)
for(i=19;a[i]!=10;i--)
{
a[i-1]=a[i]*2/10+a[i-1];
a[i]=a[i]*2%10;
}
for(i=0;a[i]==10;i++)
break;
for(j=0;i<20;i++,j++)
b[j]=a[i]+48;
puts(b);
}
怎么进了的一位始终要多执行一次?怎么修改它?

重新仔细看了程序,感觉程序会出错,还是在
for(a[19]=1;j<=64;j++)
for(i=19;a[i]!=10;i--)
{
a[i-1]=a[i]*2/10+a[i-1];
a[i]=a[i]*2%10;
}这个地方。当j=4时,a[i]开始不等于10;
a[17]=12;a[18]=2;
a[16]=12;a[17]=2
……
一直到i<0的时候,a[i]!=10的条件很可能都是满足的,虽然这时候a[i]可能都已经不知道指到哪个地方,所以最后的循环次数也是不知道的。我在a[i-1]=a[i]*2/10+a[i-1];后面加了句getch(),就是每步执行都需要输入一个东西,就可以看出,循环的次数完全不是预定的那么多。