PAT A1024 Palindromic Number

题意:回文字,对输入数值进行判断,若不是回文,则反转相加继续。

分析:数值1010,再迭代相加100次,大概达到1040级;long long型也不足以表示,需要使用字符型处理。使用字符串的转化为大数数组处理。
注意:大数运算是唯一long long也无法处理的数据大小,结果输出处需要迭代输出

#include<cstdio>
#include<string.h>

using namespace std;
const int N =1000;//最大位数

struct bign{
    int value[N];
    int len;
    bign(){
        memset(value,0,sizeof(value));
        len = 0;
    }
};

bign change(char s[]){
    bign a;
    a.len = strlen(s);
    for(int i=0;i<a.len;i++){
        a.value[i] = s[a.len-1-i]-'0';//逆序存储
    }
    return a;
}

bool ispal(bign a){
    for(int i=0;i<=(int)(a.len/2);i++){//取了是因为a.len = 1的情况
        if(a.value[i] != a.value[a.len-1-i]) return false;
    }
    return true;
}

bign add(bign a){
    bign b;
    int temp=0;//进位
    b.len = a.len;
    for(int i=0;i < b.len;i++){
        temp += a.value[i]+a.value[a.len-1-i];
        b.value[i] = temp%10;//余数为该位的值
        temp /= 10;//进位
    }
    if(temp!=0){//仍有进位
        b.value[b.len] = temp;
        b.len++;
    }
    return b;
}
int main(){
    char s[N];
    int k;
    scanf("%s %d",s,&k);
    bign a = change(s);
    int c = 0;
    for(int i = 0; i < k ; i++){//处理c次,c<=k
        if(ispal(a) == true)
            break;
        else{
            a = add(a);
            c++;
        }
    }
    for(int j=0;j<a.len;j++){
        printf("%d",a.value[a.len-1-j]);
    }
    printf("
");
    printf("%d",c);
    return 0;
}
原文地址:https://www.cnblogs.com/shuibeng/p/13567009.html