首页 新闻 会员 周边 捐助

模拟除法问题的代码哪错了

0
悬赏园豆:20 [待解决问题]


输入样例45 56时的输出错误,其他可能也有错误,但我没找到原题目,没有提交测试

include <stdio.h>

int a[1000000], yu[1000000] = {0}, yy[1000000];
//a数组记录结果,用于输出
//yu数组:记录余数是否出现过,e.g.yu[34]==1代表出现过34这个余数
//yy数组:顺序记录出现的余数,用于查找f1的位置
int main()
{
int z, m, zheng, i, f1, f2, l;
scanf("%d %d", &z, &m);//z分子 m分母

zheng = z / m;//整数部分
z = z % m;  //化为真分数(取余)
if (z == 0)//如果余数为0
{
    printf("%d.0", zheng);//直接输出结果
    return 0;
}

f1 = f2 = -1;//f1、f2分别为开始和结束循环的位置(小数点后的位置)
for (l = 0; l <= 1e7+10; l ++)//位置从0开始
{
    z *= 10;//更新分子(被除数)
    a[l] = z / m;//竖式除法记录结果
    z %= m;
    yy[l] = z;//依次记录余数
    if (z == 0)//出现了整除现象,除法结束
        break;
    if (yu[z] == 1)//如果该余数已出现过
    {
        f2 = l - 1;//循环的右端点
        for (i = 0; i <= l - 1; i ++)
            if (yy[i] == z)
            {
                f1 = i;//循环的左端点
                break;
            }
        break;
    }
    yu[z] = 1;//记录该余数存在过
}

//printf("f1:%d f2:%d l:%d\n", f1, f2, l);

printf("%d.", zheng);//输出整数部分
for (i = 0; i <= l; i ++)//输出小数部分
{
    if (i == f1)
        printf("(");
    printf("%d", a[i]);
    if (i == f2)
    {
        printf(")");
        break;
    }
}

return 0;

}

AC_2656的主页 AC_2656 | 初学一级 | 园豆:182
提问于:2022-12-13 20:08
< >
分享
所有回答(1)
0

include <iostream>

using namespace std;

int main()
{
int a[1000];
int yu[1000] = {0};
int yy[1000];
int z, m, zheng, i, f1, f2, l;
z = 45;
m = 56;

zheng = z / m;//整数部分
z = z % m;  //化为真分数(取余)
if (z == 0)//如果余数为0
{
    cout << "The result is " << zheng << " !" << endl;//直接输出结果
    return 0;
}

f1 = f2 = -1;//f1、f2分别为开始和结束循环的位置(小数点后的位置)
for (l = 0; l <= 1e7+10; l ++)//位置从0开始
{
    z *= 10;//更新分子(被除数)
    a[l] = z / m;//竖式除法记录结果
    z %= m;
    yy[l] = z;//依次记录余数
    if (z == 0)//出现了整除现象,除法结束
        break;
    if (yu[z] == 1)//如果该余数已出现过
    {
        f2 = l - 1;//循环的右端点
        for (i = 0; i <= l - 1; i ++)
            if (yy[i] == z)
            {
                f1 = i;//循环的左端点
                break;
            }
        break;
    }
    yu[z] = 1;//记录该余数存在过
}
cout << "f1:" << f1 << " f2:" << f2 << " l:" << l << endl;

cout << zheng << ".";
for (i = 0; i <= l; i ++)//输出小数部分
{
    if (i == f1){
        cout << "(";
    }
    cout << a[i];
    if (i == f2)
    {
        cout << ")";
        break;
    }
}
cout << endl;
return 0;

}

Sunny-King | 园豆:363 (菜鸟二级) | 2023-01-03 16:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册