这道题是英文的,咋一看很唬人,我们用翻译软件翻译一下就知道什么意思了。
在解这道题时,第一个坑是数字位数问题,C语言中int的取值范围为:-2147483648 ~ 2147483647,不符合条件,题目中最多可是要有20位数字。因此放弃使用int、double,使用字符串来保存数字,然后转化为int类型的数组。
第二个坑是二倍:这里用了小学数学的进位计算方法,想不出来的话,写一下就可以了。
第三个坑是如何比较两个数组。我想了半天无果,故参考其他博文的做法:使用循环来得出数组A中数字i有多少个,然后与2倍数组做对比。其中,如果2倍数组第0个数大于9,那么两个数字的排列肯定不同。
以下为代码:
#include <iostream>
using namespace std;
/*
calc a big number with over 20 digits
Sample Input:
1234567899
Sample Output:
Yes
2469135798
*/
void showNumber(int a[],int n)
{
for(int i=0;i<n;i++)
{
cout<<a[i];/*<<'-';*/
}
}
int timesOfNum(int a[],int len,int num)
{
int counter=0;
for(int i=0;i<len;i++)
{
if(a[i]==num)
counter++;
}
return counter;
}
int