AC2656 2023-01-04 20:11 采纳率: 81.8%
浏览 77
已结题

模拟除法的代码为什么错了?

题目来源:洛谷P1530 [USACO2.4]分数化小数 Fractions to Decimals

img


我的65分代码:


```c
#include <stdio.h>

int a[100010], yu[100010], yy[100010], len = 0, yu_fst;
//a数组记录结果,用于输出
//yu数组:记录余数是否出现过,e.g.yu[34]==1代表出现过34这个余数
//yy数组:顺序记录出现的余数,用于查找f1的位置
int main()
{
    int fz, fm, zheng, i, f1, f2, count;
    scanf("%d %d", &fz, &fm);//fz分子 fm分母
    
    zheng = fz / fm;//整数部分
    fz %= fm;  //化为真分数(取余)
    if (fz == 0)//如果余数为0
    {
        printf("%d.0", zheng);//直接输出结果
        return 0;
    }
    yu_fst = fz % fm; // 整数部分产生的余数
    
    f1 = f2 = -1;//f1、f2分别为开始和结束循环的位置(小数点后的位置)
    for (len = 0; len <= 1e7+10; len ++)//位置从0开始
    {
        fz *= 10;//更新分子(被除数)
        a[len] = fz / fm;//竖式除法记录结果
        fz %= fm;
        yy[len] = fz;//依次记录余数
        
        if (fz == 0)//出现了整除现象,除法结束
            break;
        if (a[len] == 0)//考虑商为0的特殊情况
        {
            yy[len] == -1;
            continue;
        }
        if (yu[fz] == 1 || fz == yu_fst)//如果该余数已出现过
        {
            f2 = len;//循环的右端点
            if (fz == yu_fst) // 循环的左端点是第一个小数的情况
            {
                f1 = 0;
                break;
            }
            for (i = 0; i < len - 1; i ++)
                if (yy[i] == fz)
                {
                    f1 = i + 1;//循环的左端点
                    break;
                }
            break;
        }
        yu[fz] = 1;//记录该余数存在过
    }
    
    printf("%d.", zheng);//输出整数部分
    count = (int)log(zheng) + 1 + 1;
    for (i = 0; i <= len; i ++)//输出小数部分
    {
        count ++;
        if (i == f1)
            printf("(");
        printf("%d", a[i]);
        if (i == f2)
            printf(")");
        if (count % 76 == 0)
            printf("\n");
    }

    return 0;
}



```

  • 写回答

2条回答 默认 最新

  • 滴水不穿石 2023-01-05 10:10
    关注

    第30行的yy[len] == -1;这句什么意思,是不是多余还是什么?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月9日
  • 已采纳回答 1月9日
  • 修改了问题 1月4日
  • 修改了问题 1月4日
  • 展开全部

悬赏问题

  • ¥20 matlab计算中误差
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊