题目大意:给你一个数,特别大,一看就知道得用字符串模拟,这个数乘2,问和之前的数中的每个数字一不一样
坑:
1、注意理解题意,每个数字出现次数也不能变,测试点4
2、注意乘2后位数增加的进位,没有这句话就少一位数了,测试点2、7 EG:9
救命,这水题咋全是坑啊,本来想着1A,不写博客了,结果改了好久,唉
烦死啦,PAT
哦!不,I like
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
int fla[120];
int ans[150];
int cnt;
int main()
{
string str;
cin >> str;
for(int i = 0;i < str.size();i++)
{
fla[str[i]-'0']++;//注意理解题意,每个数字出现次数也不能变,测试点4
}
int jin=0;
for(int i = str.size()-1;i >= 0;i--)
{
int a=str[i]-'0';
a*=2;
a+=jin;
jin=a/10;
a%=10;
ans[++cnt]=a;
}
if(jin) ans[++cnt]=jin;//注意乘2后位数增加的进位,没有这句话就少一位数了,测试点2、7
for(int j = 1;j <= cnt;j++)
{
fla[ans[j]]--;
}
for(int i = 0;i <= 9;i++)
{
if(fla[i]!=0)
{
printf("No\n");
break;
}else if(i==9)
{
printf("Yes\n");
}
}
for(int i = cnt;i >= 1;i--)
{
printf("%d",ans[i]);;
}
return 0 ;
}