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
0
0
0