鱼C论坛

 找回密码
 立即注册
查看: 2742|回复: 0

[技术交流] PTA A_1024 Palindromic Number

[复制链接]
发表于 2020-2-1 11:30:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 798236606 于 2020-2-1 11:32 编辑

传送门:https://pintia.cn/problem-sets/994805342720868352/problems/994805476473028608

解:
大整数运算
  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>

  4. using namespace std;

  5. typedef struct BIGN{
  6.     int num[1000];
  7.     int len;
  8.     bool is_neg;
  9.    
  10.     BIGN()
  11.     {
  12.         memset(num, 0, sizeof(num));
  13.         len = 0;
  14.         is_neg = false;
  15.     };
  16. }bign;

  17. bign str2bign(char *s)
  18. {
  19.     bign a;
  20.    
  21.     a.len = strlen(s);
  22.    
  23.     if (s[0] == '-')
  24.     {
  25.         a.is_neg = true;
  26.         a.len--;
  27.         s++;
  28.     }
  29.    
  30.     for (int i = 0; i < a.len; i++)
  31.         a.num[i] = s[a.len - 1 - i] - '0';
  32.         
  33.     return a;
  34. }

  35. void print_bign(bign a)
  36. {
  37.     if (a.is_neg)
  38.         putchar('-');
  39.         
  40.     for (int i = a.len - 1; i >= 0; i--)
  41.         printf("%d", a.num[i]);
  42. }

  43. bign u_add(bign a, bign b)                             
  44. {
  45.     bign c;
  46.     int carry = 0;
  47.    
  48.     for (int i = 0; i < a.len || i < b.len; i++)
  49.     {
  50.         int temp = a.num[i] + b.num[i] + carry;
  51.         
  52.         c.num[c.len++] = temp % 10;
  53.         carry = temp / 10;
  54.     }
  55.    
  56.     if (carry)
  57.         c.num[c.len++] = carry;

  58.     return c;
  59. }

  60. bool is_pal(bign a)
  61. {
  62.     for (int i = 0; i <= a.len / 2; i++)
  63.         if (a.num[i] != a.num[a.len - 1 - i])
  64.             return false;
  65.             
  66.     return true;
  67. }

  68. bign make_pal(bign a, int &k)
  69. {
  70.     int lim = k;
  71.    
  72.     for (k = 0; k < lim && !is_pal(a); k++)
  73.     {
  74.         bign b = a;
  75.         
  76.         reverse(b.num, b.num + b.len);
  77.             
  78.         a = u_add(a, b);
  79.     }
  80.    
  81.     return a;
  82. }

  83. int main(void)
  84. {
  85.     char s[15];
  86.     int k;

  87.     scanf("%s %d", s, &k);

  88.     print_bign(make_pal(str2bign(s), k));
  89.     printf("\n%d", k);
  90. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-10 11:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表