70分咋办

P1307 [NOIP2011 普及组] 数字反转

DawnWind @ 2020-12-03 23:32:05

1#5#8过不去

1答案一样啊

代码:

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
    string num;
    int i;
    cin>>num;
    if(num[0]=='-') cout<<"-";
    for(i=10;i>=0;i--){
        if(num[i]==0||num[i]=='0') continue;
        else break;
    }
    for(;i>0;i--) cout<<num[i];
    if(num[0]!='-') cout<<num[0];
    return 0;
    }

by amlelephant @ 2020-12-04 01:08:05

您可以看看我的代码,不知道您代码中的i的意思


#include<bits/stdc++.h>
#define re(a, b, c) for (int a = b; a <= c; a ++)
#define de(a, b, c) for (int a = c; a >= b; a --)
#define wh(a) while (a --)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef double d;
typedef long double ld;
inline int read()
{
    register int s=0,f=0;
    register char ch=getchar();
    while(!isdigit(ch)) f|=(ch=='-'),ch=getchar();
    while(isdigit(ch)) s=(s<<1)+(s<<3)+(ch^48),ch=getchar();
    return f?-s:s;
}
inline void write(int x)
{
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10+'0');
}
string s;
int main()
{
    cin >> s;
    if (s[0] == '-')
    {
        s.erase (0, 1);
        cout << '-';
    }
    int t = 0;
    reverse (s.begin(), s.end());
    while (s[t] == '0') t ++;
    for (int i = t; i < s.size(); i ++)
    {
        cout << s[i];
    }
    return 0;
}

by zhouyixian @ 2020-12-04 06:14:30

数组越界了。

for(i=10;i>=0;i--)

改成

for(i=num.size()-1;i>=0;i--)

就行


by DawnWind @ 2020-12-04 12:01:29

@zhouyixian

可以了,谢谢dalao!


by DawnWind @ 2020-12-04 12:02:31

@jasonwei

i是输入数字第几位

谢谢!


by DawnWind @ 2020-12-04 23:24:07

@zhouyixian

补充问一下,数组越界对编译有什么影响吗?为什么仍然可以运行捏?


by zhouyixian @ 2020-12-05 16:11:03

数组越界对编译没有影响。编译器也不知道是否越界。

按理说越界会直接re,大概是string申请内存的时候多要了点?

(跨时空对话)


by DawnWind @ 2020-12-05 18:24:20

@zhouyixian

啊这

谢谢


|