#include
#include
#include
#define decimal 100 //control accuracy
int stack[255] = {0};
int result_stack[255] = {0};
int convert2int(char* str,int x[]) //返回值是 int 数组的长度
{
int state = -1 , state_old;
int len = 0 , i = 0 , j;
char buff[255];
while(*str!= '\0')
{
state_old = state;
switch((*str)) //状态机
{
case ' ':
state = -1;
break;
case '/':
state = 1;
break;
default:
if(state == -1)
state = 0;
buff[i] = *str;
i++;
}
str++;
if(state_old!= state && state!= 0)
{
j = 0;
while(i)
{
x[len] += (buff[j] - '0')*(int)pow(10,i-1);
i--;
j++;
}
len++;
i = 0;
}
}
return len;
}
int checkrepeat(int x)
{
int i = 0;
while(i<255)
{
if(stack[i]==x) return i;
if(!stack[i])
{
stack[i] = x;
break;
}
i++;
}
return -1;
}
void main()
{
char buff[255];
int buff_num[255] = {0};
int str_len , i = 0,j = 0,z = 0; // i for print position,z for accuracy control
int k,m,x = 0;
int begin_num = -1,end_num = -1;
int flag = 0;
printf("please input nums:");
gets(buff);
str_len = strlen(buff); //add space for convinient handling
buff[str_len] = ' ';
buff[str_len+1] = '\0';
str_len = convert2int(buff,buff_num);
while(str_len>0)
{
k = buff_num[j];
m = buff_num[j+1];
x = sprintf(&buff[i],"%d",k/m);
sprintf(&buff[x+i],"%c",'.');
i += x+1;
z = 0;
while(z//find repeat address
{
k = 10*(k%m);
result_stack[z] = k/m;
if(k%m == 0)
{
end_num = z;
break;
}
if((begin_num = checkrepeat(k))!= -1)
{
end_num = z-1;
break;
}
z++;
}
z = 0;
while(z//print the result
{
if(z== begin_num)
{
sprintf(&buff[i++],"%c",'(');
flag = 1;
}
sprintf(&buff[i],"%d",result_stack[z]);
if(z== end_num)
{
if( flag )
{
sprintf(&buff[++i],"%c",')');
}
sprintf(&buff[++i],"%c",'\n');
i++;
flag = 0;
break;
}
i++;
z++;
}
memset(stack,0,255);
memset(result_stack,0,255);
str_len -= 2;
j += 2;
}
printf("%s\n",buff);
}
麻了看了一天看不懂,哭了谁能用汉语说下思路啊
“Devil组”引证GPT后的撰写:
好的