鱼C论坛

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

[技术交流] PTA A_1023 Have Fun with Numbers

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

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

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

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

传送门:https://pintia.cn/problem-sets/9 ... /994805478658260992

解:
  1. #include<cstdio>
  2. #include<cstring>

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

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

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

  41. bign muti(bign a, int b)                 
  42. {
  43.     bign c;
  44.     int carry = 0;
  45.    
  46.     if (!b)
  47.     {
  48.         c.len++;
  49.         c.is_neg = a.is_neg;
  50.         
  51.         return c;
  52.     }
  53.    
  54.     if (a.is_neg + (b < 0) == 1)
  55.         c.is_neg = true;
  56.         
  57.     if (b < 0)
  58.         b = -b;
  59.         
  60.     for (int i = 0; i < a.len; i++)
  61.     {
  62.         int temp = a.num[i] * b + carry;
  63.         
  64.         c.num[c.len++] = temp % 10;
  65.         carry = temp / 10;
  66.     }

  67.     while (carry)
  68.     {
  69.         c.num[c.len++] = carry % 10;
  70.         carry /= 10;
  71.     }   

  72.     return c;
  73. }

  74. void is_per(bign a, bign b)
  75. {
  76.     int hash_table[10] = {0};
  77.    
  78.     for (int i = 0; i < a.len; i++)
  79.         hash_table[a.num[i]]++;
  80.         
  81.     for (int i = 0; i < b.len; i++)
  82.         hash_table[b.num[i]]--;        
  83.         
  84.     for (int i = 0; i < 10; i++)
  85.         if (hash_table[i])
  86.         {
  87.             puts("No");
  88.             return;
  89.         }
  90.         
  91.     puts("Yes");
  92. }

  93. int main(void)
  94. {
  95.     char s[25];

  96.     scanf("%s", s);

  97.     bign a = str2bign(s), b = muti(a, 2);

  98.     is_per(a, b);
  99.     print_bign(b);
  100. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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