能看看这个整除光棍错在哪里吗?

img

img

#include <stdio.h>
int main()
{
    int n,x,i,count=0;
    long sum=0,s;
    scanf("%d",&x);
    if(x%5!=0){
        for(i=1;;i++){
            sum=sum*10+1;
            count++;
            if(sum>x){
                if(sum%x==0){
                    s=sum/x;
                    goto loop;
                }
            }
        }
    }
    loop:
    printf("%lld %d",s,count);
    return 0;
}



img


这个提示意思就是你用逐渐增加1的位数这种方法是会超时的

你耗时太多了
要把不必要的操作全部去掉
比如已经告诉你输入的数不是5的倍数,那你还多此一举判断一下干什么
还有你的i本身就是位数,为什么另外写个count去++,这样每个循环有2个变量在++不消耗时间的吗
还有i从1开始循环很显然浪费时间,不过我还没想好怎么优化
goto loop改为break

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
    int x,count=0;
  double sum=0,s;
  double intpart ;
  loop:  printf("请输入:\n");
  scanf("%d",&x);
       if(x%5==0||x%2==0){
        printf("请输入不以5结尾的奇数\n");
        system("pause");
        goto loop;
       }
       
    do{
          sum=sum*10+1;count++;
    }while(double( modf(sum/x,&intpart))!= 0.000000);  //modf  返回sum/x的小数部分
 
  
     s=sum/x;
      printf("%.0f %d\n",s,count);
    return 0;
}
 
 

看不懂联系 qq 541496557

1.goto语句要慎用,能不用就不用
2.goto语句使用时,以我的经验,代码向上跳回时使用,向下执行尽量不要使用goto语句跳转,能用continue或者break实现,就用这些来实现,不要养成使用goto语句的习惯