谜之为何最后一个点超时???!!

P1307 [NOIP2011 普及组] 数字反转

zhengziqi @ 2024-06-01 15:03:32

在线求助各位Dalaos 下面这个代码只得了100分 最后一个点超时 这是为什么???

#include<iostream>
#include<cstring>
using namespace std;
long long s[11]={},n,k=0,a=1;
int main()
{
    memset(s,0,sizeof(n));//数组清零 
    cin>>n;
    for(int i=1;i<=10;i++)
    { 
        s[i]=n/a%10; 
        a*=10;
    }//存储每一位(从个位开始) 
    a=1000000000;
    for(int i=1;i<=10;i++)
    {  
        k+=s[i]*a; 
        a/=10;
    }//倒序 
    while(k%10==0)
    {
        k/=10;
    } 
    cout<<k;
    return 0;
}

我很无奈


by zhouzihang1 @ 2024-06-01 15:13:36

@zhengziqi 如果 k = 0 呢?


by jiangyichen_10 @ 2024-07-13 10:39:21

要有对负数和零的特判:

#include<bits/stdc++.h>
using namespace std;
int f[15];
int main(){
    int n,l=0,s=0;
    cin>>n;
    if(n==0){
        cout<<0<<endl;
        return 0;
    }
    if(n<0){
        n=abs(n);
        while(n>0){
            f[l]=n%10;
            n/=10;
            l++;
        }
        s=f[0];
        for(int i=1;i<=l;i++){
            s*=10;
            s+=f[i];
        }
        cout<<'-'<<s/10<<endl;
    }else{
        while(n>0){
            f[l]=n%10;
            n/=10;
            l++;
        }
        s=f[0];
        for(int i=1;i<=l;i++){
            s*=10;
            s+=f[i];
        }
        cout<<s/10<<endl;
    }
    return 0; 
}

|