50分求助

P1307 [NOIP2011 普及组] 数字反转

yangzijin @ 2024-09-30 16:18:14

#include<bits/stdc++.h>
using namespace std;
bool f(string s){
    if(s[0]=='-')return true;
    return false;
}
int main(){
    string s;
    cin>>s;
    if(f(s)==true){
        long long t=0;
        cout<<'-';
        for(int i=s.size()-1;i>=1;i--){
            t+=int(s[i]-'0');
            t*=10;
        }
        cout<<t/10;
    }
    else{
        long long t=0;
        for(int i=s.size()-1;i>=1;i--){
            t+=int(s[i]-'0');
            t*=10;
        }
        cout<<t/10;
    }
    return 0;
} 

by BeTheNorthStar @ 2024-09-30 17:19:20

for循环这么判串容易出问题,改成for(int i=s.size()-1;isdigit(s[i]);i--)或者for(int i=s.size()-1;'0'<=s[i]&&s[i]<='9';i--)\ 其实反着扫直接输出就行


by liuzhouyang @ 2024-10-01 17:56:02

@yangzijin 不用这么麻烦啊?

(康康我的代码)

#include<bits/stdc++.h>     //头文件 
#define int long long       //宏定义 
#define float double 
using namespace std;        //命名空间 
int n,ans;      //初始化 
signed main()       //主函数 
{
    ios::sync_with_stdio(false);        //改进输入输出速度 
    cin>>n;     //输入 
    for(int i=n;i!=0;i/=10)     //根据位值原理,依次求 n 的每一位 (注意因为有负数,所以将 i>0 改为 i!=0 就行啦) 
    {
        ans*=10;        //将这一位往左移 (有个巧妙的地方,0不会左移) 
        ans+=i%10;      //再加上当前末尾 
    }
    cout<<ans;      //输出答案 
}

by SunLaoC @ 2024-10-01 22:43:06

#include<iostream>
using namespace std;

long long Gin(int t) {
    long long i, n=1, m;
    for ( i = 10; ; i*=10)  {
        m = t / i;  
        if (m==0)       {
            n = i / 10;
            break;      }
    }
    return n;
}

int main() {
    long long N, i, n=1, d, S = 0;
    cin >> N;
    d = Gin(N);
    for ( i = 10;  ; i*=10)
    {
        n = N % i-N%(i/10);
        if (N%(i/10) == N)  {   break;  }
        S = S + n*d*100/(i*i);

    }
    cout << S << endl;
}

by SunLaoC @ 2024-10-01 22:44:13

@SunLaoC 暴力求解哈哈


by yangzijin @ 2024-10-03 21:12:20

@SunLaoC 谢谢


|