//main.cpp
//根据你的要求,在有数字相同时输出“相同的数字”,出现不是2的n次方的数字时输出“还可以化简”
//没有使用链表,因为太麻烦,realloc足以满足。
//
#include <stdio.h>
#include <malloc.h>
#include <math.h>
int main()
{
int number=0;
size_t array_length = 1;
int * array =(int*) malloc(sizeof(array_length*sizeof(int)));
int ret = 0;
do
{
ret = scanf("%d",&number);
if(ret==0 || ret==EOF)
return 0;
size_t idx=0;
//检查是否有相同的数字
for(;idx<array_length;idx++)
{
//相同的数字
if(array[idx]==number)
{
//printf("相同的数字\n");
printf("还可以化简");
free(array);
return 1;
}
}
if(realloc(array,(array_length+1)*sizeof(int))==NULL)
return -1;
array_length++;
array[array_length-1]=number;
ret = log2(number);
//printf("number %d : log2 = %d ,%lf \n",number,ret,log2(number));
if(!(log2(number)-ret==0))//不是2的n次方
{
printf("还可以化简");
break;
}
}
while(1);
free(array);
return 0;
}
double log2(double x)
{
return log(x)/log(2);
}
温馨提示:内容为网友见解,仅供参考