自测-4 Have Fun with Numbers (20分)
思路分析:文章的大概意思是:输入一串k位(k<=20)数字n,将它乘以2,得到结果数字m,m中出现的数字是否和输入的数字n中出现的数字次数一样,即由相同数字组成,只是位置发生了变化,如果是,就返回yes,如果不是,就返回no
由于最大可以输入20位的数字,就算是long long 类型的整型也存储不了,而且如果存在一个整型变量中,会导致不好判断每一个数字出现的次数,于是将这个数存放在字符串类型,string,char[]比较合适
通过遍历数字,将每一个出现的数字和0~9作比较,得到每个数字出现的次数,并将他们存放在数组中,相当于把 0到9作为一个标准,将每一次数与他们比较,如果相同就加上1,
比较标准:0 1 2 3 4 5 6 7 8 9
比较数组:2 4 6 5 8 1 2 3 5 4
出现次数:0 1 2 1 2 2 1 0 1 0
比较数组:2 9 3 1 6 2 4 7 0 8
出现次数:1 1 2 1 1 0 1 1 1 1
由上图可知,这个数乘以2以后,数字出现的次数和该数不相等
输出no的情况有:1.当乘以2以后的位数超过原来的位数,直接输出no
2.当两组数中数字出现的次数不同的时候
#include <iostream>
#include <string>
#define MAX 20
using namespace std;
void print(int num[],int len);//定义一个输出的方法
void counting(int* num,int* a, int len);
int main()
{
string str;
cin >> str;
int num1[MAX],num2[MAX];//num1,存放输入的数组,num2,存放乘以2以后的数组
int a[10];
int b[10];//0~9的数字,一共由10位数
int i = 0;
int size