当前位置: 代码迷 >> 综合 >> pat 1023. Have Fun with Numbers
  详细解决方案

pat 1023. Have Fun with Numbers

热度:43   发布时间:2024-01-14 23:17:35.0

1,输入的数最长有20位,即使用long long 类型 的数也不够,所以用字符串处理

2,注意double之后数字位数变长一位的情况(5*2=10),即乘2算完之后进位标志carry为1,不要把最高位的数字忘了。


#include <iostream>
#include <string.h>
using namespace std;int first[10],second[10];void countDigits(char* a,int b[])
{int len=strlen(a);for(int i=0;i<len;i++){int num = a[i]-'0';b[num]++;}
}int main()
{freopen("E:/data/1023.txt","r",stdin);char num[22],num2[22];cin>>num;fill(first,first+10,0);fill(second,second+10,0);countDigits(num,first);int len=strlen(num);int carry=0,index=0;char temp[22];for(int i=len-1;i>=0;i--){int digit=num[i]-'0',d2=0;digit=digit*2+carry;if(digit>9){d2=digit%10;carry = digit/10;}else{carry =0;d2=digit;}char ch=(char)d2+'0';temp[index]=ch;index++;}if(carry>0){char ch=(char)carry+'0';temp[index++]=ch;carry=0;}int p=0;for(int i=index-1;i>=0;i--){num2[p]=temp[i];p++;}num2[index]='\0';if(index>len){cout<<"No"<<endl<<num2<<endl;return 0;}countDigits(num2,second);int success=1;for(int i=0;i<10;i++){if(first[i]!=second[i]){success=0;}}if(success==0)cout<<"No"<<endl;elsecout<<"Yes"<<endl;cout<<num2<<endl;return 0;
}