Description
题目大意:一个长度没有超过20的数字乘以2后,是否与原来的数字构成相同
Input
长度不超过20的数字
Output
Yes或No
乘以2的数字
解题思路
算法标签:显然已经超过long long的范围,所以用number数组模拟乘法运算,最后与原来的数字判断一下即可
代码
// TSWorld
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N =100;
int tot[N];
int number[N];
int main()
{
string s1;
int data = 0,len = 0,place = 0;
bool isok = true;
cin>>s1;
for(int i = s1.length()-1;i >= 0;i--)
{
data = s1[i] - '0';
tot[data]++;
number[len] = s1[i] - '0';
len++;
}
for(int i = 0;i < len;i++){
number[i] *= 2;
}
place = 0;
for(int i = 0;i < len;i++)
{
if(number[i] > 9)
{
number[i+1] += number[i]/10;
number[i] %= 10;
}
}
if(number[len] != 0)
len++;
for(int i = 0;i < len;i++)
{
data = number[i];
if(tot[data] > 0)
tot[data]--;
else
{
isok = false;
break;
}
}
for(int i = 0;i <= 9;i++)
{
if(tot[i] != 0)
{
isok = false;
break;
}
}
if(isok)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
for(int i = len-1;i >=0;i--)
cout<<number[i];
return 0;
}