• [PAT] A1023 Have Fun with Numbers


    【题目大意】

    给一个不超过20位的数字,如果将它乘以2得到的数仅仅是原来的数字重新排列得到的,那就输出Yes,下一行输出加倍后的数。如果不是,输出No,下一行输出加倍后的数。

    【思路】
    20位过于庞大,超出了long long,所以用数组来做,其中的算法核心有竖式乘法的数组计算法。

    【tips】

    1 判断原数和double原数是否拥有同样数字的方法:

    建立一个数组check[0~9],如果原数的第i位是a,则check[a]++;如果double原数的第i位是a,则check[a]--。最后检查check[0~9],只要有一个不为0,则输出No。

    2 读入一个字符(包含空格),用char c = getchar();

    【AC代码】

     1 #include<iostream>
     2 #include <algorithm>
     3 using namespace std;
     4 int main()
     5 {
     6     int num[22];
     7     int digit = 0;
     8     char c;
     9     while (1)
    10     {
    11         c = getchar();
    12         if (c == '
    ')break;
    13         num[digit] = c - '0';
    14         digit++;
    15     }
    16     bool jinwei = 0;//进位标志
    17     int i;
    18     int dnum[22];
    19     for (i = digit - 1; i >= 0; i--)
    20     {
    21         dnum[i] = 2 * num[i] + jinwei;
    22         if (dnum[i] >= 10)
    23         {
    24             dnum[i] -= 10;
    25             jinwei = 1;
    26         }
    27         else jinwei = 0;
    28     }
    29     if (jinwei == 1)
    30     {
    31         cout << "No" << endl;
    32         cout << 1;//输出进位
    33     }
    34     else
    35     {
    36         int check[10] = { 0 };
    37         for (i = 0; i < digit; i++)
    38         {
    39             check[num[i]]++;
    40             check[dnum[i]]--;
    41         }
    42         for (i = 0; i < 10; i++)
    43             if (check[i] != 0)
    44                 break;
    45         if (i == 10)cout << "Yes" << endl;
    46         else cout << "No" << endl;
    47     }
    48     for (i = 0; i < digit; i++)
    49         cout << dnum[i];
    50     return 0;
    51 }
  • 相关阅读:
    ORACLE 计算时间相减间隔
    oracle中游标详细用法
    oracle中计算某月的天数
    Unity3D导出的EXE不用显示分辨率选择界面
    Unity3D 之暂停和继续的实现
    double的值太大,以及补0
    Unity3D鼠标点击物体产生事件
    java POi excel 写入大批量数据
    Unity3D 判断鼠标是否按在UGUI上
    Unity3D 之UGUI 滚动条
  • 原文地址:https://www.cnblogs.com/yue36/p/12377927.html
Copyright © 2020-2023  润新知