50分 求大佬帮忙看看

P1307 [NOIP2011 普及组] 数字反转

zhoushudehencai @ 2022-11-11 00:26:42

#include<stdio.h>
int flag = 0;
int jc(int i)
{
    int j = 0;
    int ret = 1;
    for (j = 0; j <= i; j++)
    {
        ret *= 10;
    }
    return ret;
}
int ws(int n)
{
    if (n < 10)
    {
        flag++;
        return flag;
    }
    if (n >= 10)
    {
        flag++;
        return ws(n / 10);
    }
}
int main()
{
    long n = 0;
    scanf("%ld", &n);
    int j = ws(n);
    flag = 0;
    int arr[1001];
    int i = 0;
    for (i = 0; i <= j - 1; i++)
    {
        if (i == 0)
        {
            arr[i] = n % 10;
        }
        if (i != 0)
        {
            arr[i] = (n / jc(i - 1)) % 10;
        }
    }
    for (i = 0; i<=j-1; i++)
    {
        if (i == 0)
        {
            if (arr[i] != 0)
            {
                printf("%d", arr[i]);
            }
        }
        if (i != 0)
        {
            if (arr[i] != 0 || arr[i - 1] != 0)
            {
                printf("%d", arr[i]);
            }
        }
    }
    return 0;
}

by W123789 @ 2022-11-11 07:41:00

错误原因:

  1. 没有处理负数
  2. 输出的时候需要判零
  3. 只要便利的时候出现大于 0 的数, 这个数后面的零就可以输出
#include<stdio.h>
int flag = 0;
int jc(int i)
{
    int j = 0;
    int ret = 1;
    for (j = 0; j <= i; j++)
    {
        ret *= 10;
    }
    return ret;
}
int ws(int n)
{
    if (n < 10)
    {
        flag++;
        return flag;
    }
    if (n >= 10)
    {
        flag++;
        return ws(n / 10);
    }
}
int main()
{
    long n = 0;
    scanf("%ld", &n);
    if (n < 0) //判负数
    {
        n = -n;
        putchar('-');
    }
    int j = ws(n);
    flag = 0;
    int arr[1001];
    int i = 0;
    for (i = 0; i <= j - 1; i++)
    {
        if (i == 0)
        {
            arr[i] = n % 10;
        }
        if (i != 0)
        {
            arr[i] = (n / jc(i - 1)) % 10;
        }
    }
    bool flag2 = 0;
    for (i = 0; i<=j-1; i++)
    {
        if (i == 0)
        {
            if (arr[i] != 0 || i == j - 1) // 判n = 0
            {
                printf("%d", arr[i]);
            }
        }
        if (i != 0)
        {
            if (arr[i] != 0 || (arr[i] == 0 && flag2 == 1))//处理0
            {
                printf("%d", arr[i]);
            }
        }
        if (arr[i] > 0) 
        {
            flag2 = 1;
        }
    }
    return 0;
}

by zhoushudehencai @ 2022-11-11 13:15:35

感谢大佬抽出时间看我的代码,本人新手,刚刚更正了大佬指出的几个错误,已经取得了一百分,再次对大佬表示由衷的感谢!!


|