问题标题: 酷町堂:3819 好玩的数字对折

0
0
已解决
汤启恩
汤启恩
新手光能
新手光能

题目描述 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开头的整数

 

 

错误代码:

#include<bits/stdc++.h>
using namespace std;
int a[20000001]; 
int main(){
    string s;
    cin>>s;
    int n,cl=s.size();
    cin>>n;
    for(int i=0;i<s.size();i++){
        a[i+1]=s[i]-'0';
    }
    while(n--){
        if(cl%2==1){
            for(int i=cl/2+2;i<=cl;i++){
                a[i]+=a[cl+1-i];
            }
        }
        else{
            for(int i=cl/2+1;i<=cl;i++){
                a[i]+=a[cl+1-i];
            }
        }
        for(int i=1;i<=cl;i++){
            if(a[i]>=10&&a[i]<=18){
                cl++;
                for(int j=cl;j>=i+2;j--)
                    a[j]=a[j-1];
                a[i+1]=a[i]%10;
                a[i]/=10;
            }       
        }
    }
    for(int i=cl/2+1;i<=cl;i++)
        cout<<a[i];
    return 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
0
李显晨
李显晨
中级启示者
中级启示者

雷霆嘎巴

小鸟伏特加,无情哈拉少

一giao我里giaogiao

0
0
0
我要回答