http://acm.sdibt.edu.cn/JudgeOnline/problem.php?id=2338
题目大意:(如题)
输入输出:(如题)
解题思路:
1.长除法。(小学学过)
2.开辟lastrem数组,lastrem[i]表示余数i是否在前面出现过以及i出现的位置。数组dec[i]保存长除法中的商(包括循环和非循环部分)
3.sprintf的应用:由于涉及到整型数据到字符串型数据的转换,所以用sprintf。
核心代码:

while(true)
	{
		if(rem==0)
		{
			if(i==0)
				sprintf(res+strlen(res),"0");
			else
				sprintf(res+strlen(res),"%s",deci);
			break;
		}
		if(lastrem[rem]!=-1)
		{
			sprintf(res+strlen(res),"%.*s(%s)",lastrem[rem],deci,deci+lastrem[rem]);
                           //%.*s表示取deci的前lastrem[rem]位
                		break;
		}
		lastrem[rem]=i;
		n=rem*10;
		deci[i]=n/d+'0';
		rem=n%d;
		i++;
    }

发表评论

电子邮件地址不会被公开。

Post Navigation