1023 Have Fun with Numbers (20 分)笔记

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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值