70分求助,三个WA

P1307 [NOIP2011 普及组] 数字反转

qgzhuyin @ 2022-12-23 00:55:58

#include<stdio.h>
int mi(int a,int b)
{
    int t=1;
    for(int i=1;i<=b;i++)
    {
        t=t*a;
    }
    return t;
}
int main()
{
    int n,temp,f=0,k=0;
    scanf("%d",&n);
    temp=n;
    if(n==0)printf("0");
    else{
        if(n<0)temp=n*(-1);
        int a[11];
        for(int i=1;i<=10;i++)
        {
            a[i]=temp%mi(10,i)/mi(10,i-1);
        }
        for(int i=10;i>=1;i--)
        {
            if(a[i]==0)k++;
            else f=f+a[i]*mi(10,10-k-i);
        }
        if(n<0)f=(-1)*f;
        printf("%d",f);

    }
}

想知道是哪个环节出了问题,思路上有哪些地方可以优化?万分感谢!


by Kevin_Mamba @ 2022-12-23 07:47:18

@qgzhuyin 翻转可以用字符串。


by Kevin_Mamba @ 2022-12-23 07:57:58

@qgzhuyin 问题在于k。

k是前导0个数,不是所有0个数。

输入1010,你会输出11。

改得:

        bool fl=0;
        for(int i=10;i>=1;i--)
        {
            if(!fl&&a[i]==0)k++;
            else f=f+a[i]*mi(10,10-i-k),fl=1;
        }

by Alone_Moonking @ 2022-12-23 08:17:44

@qgzhuyin 这是我的代码↓

#include<iostream>
using namespace std;
int main()
{
    int n;
    int sum=0;
    cin>>n;
    if(n<0)
    {
        cout<<"-";
        n=-n;
    }
    while(n)
    {
        sum=sum*10+n%10;
        n/=10;
    }
    cout<<sum<<endl;
    return 0;
}

by qgzhuyin @ 2022-12-23 11:46:54

@2124Kobe 明白了,非常感谢!


by qgzhuyin @ 2022-12-23 11:47:18

@Friends_priceless 感谢感谢,看到了更简洁的思路


|