这是我试图用c解决的“某种”逻辑问题。 我基本上输入一个数字中所有除数的数字,并将数字添加到一个数字数字并存储在变量'best'中。 但我得到的输出是“浮点异常(核心转储)” 认为这将是一个循环的问题,但我找不到任何。 我能否知道这个错误的含义是什么?是什么导致它?
#include <stdio.h>
void main()
{
int n,a[50],b[50],k=0,l1=0,l2=0,temp,big,bigi,best=0,i,l3;
printf("Enter an integer (less than 10^5):- ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
if(n%i==0)
{
a[k]=i;
k++;
}
}
for(i=0;i<k;i++)
{
b[i]=a[i];
}
for(i=0;i<k;i++)
{
if(a[i]<10)
{
continue;
}
else
{
l3=a[i];
while(l3>0)
{
temp=l3%10;
l1=l1+temp;
l3=l3/10;
}
if(l1>=10)
{
while(l1>0)
{
temp=l1%10;
l2=l2+temp;
l1=l1/10;
}
}
a[i]=l2;
}
}
big=a[0];
for(i=0;i<k;i++)
{
if(a[i]>big)
{
big=a[i];
bigi=i;
}
}
for(i=0;i<k;i++)
{
while(i!=bigi)
{
if(a[bigi]==a[i])
{
if(b[bigi]>b[i])
{
best=a[i];
}
else
{
best=a[bigi];
}
}
}
if(best=0)
{
best=a[bigi];
}
}
printf("The best number is :- %d",best);
}
答案 0 :(得分:1)
哦天哪史蒂夫,你的代码格式化!
我没有答案,但我愿意打赌它与数组索引有关。您正在创建一个包含50个元素的数组。
然后您使用索引 k访问它,这取决于您的输入!你怎么能保证k不会超过49?
在那里放一些调试printfs。到处。监控您的变量 k 。看看你的循环在做什么,以及你陷入困境的地方。
为了我自己的理智,以及其他任何读这篇文章的人,在这里:
#include <stdio.h>
void main()
{
int n,a[50],b[50],k=0,l1=0,l2=0,temp,big,bigi,best=0,i,l3;
printf("Enter an integer (less than 10^5):- ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
if(n%i==0)
{
a[k]=i;
k++;
}
}
for(i=0;i<k;i++)
{
b[i]=a[i];
}
for(i=0;i<k;i++)
{
if(a[i]<10)
{
continue;
}
else
{
l3=a[i];
while(l3>0)
{
temp=l3%10;
l1=l1+temp;
l3=l3/10;
}
if(l1>=10)
{
while(l1>0)
{
temp=l1%10;
l2=l2+temp;
l1=l1/10;
}
}
a[i]=l2;
}
}
big=a[0];
for(i=0;i<k;i++)
{
if(a[i]>big)
{
big=a[i];
bigi=i;
}
}
for(i=0;i<k;i++)
{
while(i!=bigi)
{
if(a[bigi]==a[i])
{
if(b[bigi]>b[i])
{
best=a[i];
}
else
{
best=a[bigi];
}
}
}
if(best=0)
{
best=a[bigi];
}
}
printf("The best number is :- %d",best);
}