在while循环中y=change(last)传过去参数显示str字符串中的字符无效,一看内存,last里边有值没错呀。给last赋值结束后没有赋‘\0’
1. 加 '\0' 的情况
(1) 当字符数组以单个字符进行赋值时:
char ch[10];
ch[10]={
‘a’,’b’,………’\0’};
(2) 或者用for循环进行赋值时:
for (i=0; i<9; i++)
{
ch[i]='';
}
ch[9]='\0';
记得在数组的最后要加上‘\0’;
2. 自动加 \0 的情况
但是字符串进行赋值时,默认加了‘\0’;
char ch[10]=”hiwehfoif”;或者是在命令行里进行赋值时,也默认加了’\0’。
记得要留出 \0 的位置
#include<bits/stdc++.h>
using namespace std;
struct bign{
int d[1010];
int len;
bign(){
memset(d,0,sizeof(d));
len=0;
}
};
bool pjudge(bign a)
{
for(int i=0;i<a.len/2;i++)
{
if(a.d[i]!=a.d[a.len-i-1])
return false;
}
return true;
}
bign add(bign a,bign b)
{
int carry=0;
bign c;
for(int i=0;i<a.len||i<b.len;i++)
{
int temp=a.d[i]+b.d[i]+carry;
c.d[c.len++]=temp%10;
carry=temp/10;
}
if(carry!=0)
c.d[c.len++]=carry;
return c;
}
bign change(char str[])
{
bign a;
a.len=strlen(str);
for(int i=a.len-1;i>=0;i--)
a.d[a.len-i-1]=str[i]-'0';
return a;
}
int main()
{
int count=0,k;
char first[1010],last[1010];
cin>>first>>k;
bign x=change(first),y;
strcpy(last,first);
reverse(last,last+strlen(first));
while(!pjudge(x)&&count<k)
{
y=change(last);
x=add(x,y);
for(int i=0;i<x.len;i++)
last[i]=x.d[i]+'0';
count++;
}
for(int i=x.len-1;i>=0;i--)
cout<<x.d[i];
cout<<endl<<count;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
struct bign{
int d[1010];
int len;
bign(){
memset(d,0,sizeof(d));
len=0;
}
};
bool pjudge(bign a)
{
for(int i=0;i<a.len/2;i++)
{
if(a.d[i]!=a.d[a.len-i-1])
return false;
}
return true;
}
bign add(bign a,bign b)
{
int carry=0;
bign c;
for(int i=0;i<a.len||i<b.len;i++)
{
int temp=a.d[i]+b.d[i]+carry;
c.d[c.len++]=temp%10;
carry=temp/10;
}
if(carry!=0)
c.d[c.len++]=carry;
return c;
}
bign change(char str[])
{
bign a;
a.len=strlen(str);
for(int i=a.len-1;i>=0;i--)
a.d[a.len-i-1]=str[i]-'0';
return a;
}
int main()
{
int count=0,k;
char first[1010];
cin>>first>>k;
bign x=change(first);
while(!pjudge(x)&&count<k)
{
bign y=x;
reverse(y.d,y.d+y.len);
x=add(x,y);
count++;
}
for(int i=x.len-1;i>=0;i--)
cout<<x.d[i];
cout<<endl<<count;
return 0;
}