1024 Palindromic Number (25分) last里的字符串赋值后没有加‘\0‘,调试显示字符串无效

在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;
}

猜你喜欢

转载自blog.csdn.net/qq_42835526/article/details/113488179