PTA A_1024 Palindromic Number
本帖最后由 798236606 于 2020-2-1 11:32 编辑传送门:https://pintia.cn/problem-sets/994805342720868352/problems/994805476473028608
解:
大整数运算
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef struct BIGN{
int num;
int len;
bool is_neg;
BIGN()
{
memset(num, 0, sizeof(num));
len = 0;
is_neg = false;
};
}bign;
bign str2bign(char *s)
{
bign a;
a.len = strlen(s);
if (s == '-')
{
a.is_neg = true;
a.len--;
s++;
}
for (int i = 0; i < a.len; i++)
a.num = s - '0';
return a;
}
void print_bign(bign a)
{
if (a.is_neg)
putchar('-');
for (int i = a.len - 1; i >= 0; i--)
printf("%d", a.num);
}
bign u_add(bign a, bign b)
{
bign c;
int carry = 0;
for (int i = 0; i < a.len || i < b.len; i++)
{
int temp = a.num + b.num + carry;
c.num = temp % 10;
carry = temp / 10;
}
if (carry)
c.num = carry;
return c;
}
bool is_pal(bign a)
{
for (int i = 0; i <= a.len / 2; i++)
if (a.num != a.num)
return false;
return true;
}
bign make_pal(bign a, int &k)
{
int lim = k;
for (k = 0; k < lim && !is_pal(a); k++)
{
bign b = a;
reverse(b.num, b.num + b.len);
a = u_add(a, b);
}
return a;
}
int main(void)
{
char s;
int k;
scanf("%s %d", s, &k);
print_bign(make_pal(str2bign(s), k));
printf("\n%d", k);
}
页:
[1]