问题标题: 酷町堂:这道题,我实在想不出来,上问答一搜,问的全是我们班的……真的!3819

0
0
已解决
林芳
林芳
高级守护
高级守护

3819   好玩的数字对折经验值:1200

题目描述 Description

小明在玩过序列对折后,突发奇想,决定自己设计一个数字对折游戏。
对输入的一个整数n,将整数n的从中间对折,方向从左到右,对折后相同位置上的数字会累加到一起。
他想知道对折m次后的整数的样子。

输入描述 Input Description

输入一个整数n,n不超过100,000位,和对折次数m(m<=100)

输出描述 Output Description

输出对折m次后的整数

样例输入 Sample Input

56789 2

样例输出 Sample Output

4211

数据范围及提示 Data Size & Hint

56789第一次折叠后是71414,再一次折叠是4211。
每次折叠后的数字应该是不以0开头的整数

林芳在2020-12-09 21:51:35追加了内容


0
已采纳
陈振轩
陈振轩
高级光能
高级光能

我写完了(

原本是40

然后发现没把折叠后字符串开头清零

0
0
郑金顺
郑金顺
中级光能
中级光能
/*
    总共处理m次

    1.遍历 该字符串
      左边折向右边
        对于位数是奇数还是偶数 用标志odd处理 奇数的情况ans先存x[n/2]这一位

    对应位相加,看到的结果用字符串y存储
        对应位相加的结果先用整数存储tmp
        在吧整数tmp==0的情况 y不能为空串

    字符串连接,最终得到的结果正着存,存到字符串ans

    ans首位连续的0要删去 
*/ 


and

核心

string f(string x){
    string ans="";
    int odd=0,n=x.size();
    if(n%2){
        odd=1;
        ans+=x[n/2];
    }
    for(int i=n/2+odd;i<n;i++){
        string y="";
        int tmp=x[i]+x[n-1-i]-'0'-'0';
        if(tmp==0){
            y="0";
        }
        else{
            while(tmp){
                y=char(tmp%10+'0')+y;
                tmp/=10;
            }
        }
        ans=ans+y;
    }
    while(ans[0]=='0'){
        ans.erase(0,1);
    }
    return ans;
}




0
0
王子逸
王子逸
新手天翼
新手天翼

注释给你

递推要好好学!

特别难!

/*
总处理m次
1.遍历该字符串
左边折向右边
对位数是技术还是偶数 用odd处理  奇数情况ans先存想x[n/2]这一位

对应位相加,得到的结果用字符串y存储
对应位相加的结果先用整数tmp转成字符串y 倒着存
特判:tmp==0的情况y不能为空串

字符串连接,最终得到的结果正这存,存到字符串ans

ans首位连续的0要删去 
*/

 

0
邹昊轩
邹昊轩
资深光能
资深光能

这一题是一道大型的模拟题

算了直接上代码:

string g(int x){
    string ans="";
    while(x){
        ans=char(x%10+'0')+ans;
        x/=10;
    }
    if(ans=="") ans="0";
    return ans;
}
string f(string s){
    int len=s.size(),t;
    string ans="";
    for(int i=len/2;i<=len-1;i++){
        if(len%2&&i==len/2){
            ans+=s[i];
        }else{
            t=s[i]-'0'+s[len-1-i]-'0';
            ans+=g(t);
        }
    }
    while(ans[0]=='0') ans.erase(0,1);
    return ans;
}
int main()
{
    cin>>s>>m;
    if(s=="0"){
        cout<<0;
        return 0;
    }
    while(m--){
        s=f(s);
    }
    cout<<s;

 

抄代码固然可耻,建议手打,不要复制

0
0
我要回答