1023 Have Fun with Numbers (20 分)笔记
题意
给出一个大数,请你求出这个数乘以2后的数。并判断组成这两个数的每位上的数是否一样。如123和321它们都是由 1个1 1个2 1个3 组成.
写题过程
出题比较顺利,未遇到坑。
思路
用一个数组 y 记录加倍前后两个数的数字组合 (0~9)加倍前遇到 i 则y [ i ] + 1 ,加倍后遇到 i 则y [ i ] - 1,再用一个数组 z 记录加倍后的数。
最后如果两个数用到的数字一样则 y的第0-9项都为零,再输出加倍后的数即可。
代码
#include<stdio.h>
#include<string.h>
int main()
{
char x[31],y[14],z[34];
int len,a,b=0,flag=0,cnt=0;
memset(y,0,sizeof(y));
memset(z,0,sizeof(z));
scanf("%s",&x);
len=strlen(x);
for(int i=len-1;i>=0;i--){
a=x[i]-'0';
y[a]++;
a=a*2+b;
b=a/10;
a=a%10;
y[a]--;
z[cnt++]=a;
}
if(b!=0){
y[b]++;
z[cnt++]=b;
}
for(int i=0;i<10;i++){
if(y[i]!=0){
flag=1;
break;
}
}
if(flag){
printf("No\n");
}else{
printf("Yes\n");
}
for(int i=cnt-1;i>=0;i--){
printf("%d",z[i]);
}
printf("\n");
return 0;
}