Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

终于ac, 总结下

Posted by robertbean at 2011-09-06 20:05:36 on Problem 1001
新手呵呵,自我反省。

输入时 没有检查 = EOF, 结果导致 ole。

数据考虑不全面。 借鉴了别人的测试数据改了好久。基本上只要稍微另类点的数据1就有问题。

最严重的时没有仔细思考。想当然的作。最初的代码在计算两个书相乘的时候,把乘数和被乘数都用了数组表示。 这样,日工作量大了nn倍,还各种混乱。

后来查测试数据时也看看别人怎么写的。才发现,把乘数存储在数组中就好了,被乘数直接记成证书就ok的。慢慢成长吧。。。把代码贴贴,ac了,暂时实在懒得再改了,自我留念啦。
#include <stdio.h>

int main(void)
{
    char num[7],output[105];
    int res[105],tRes[105], power,pPos,tPos,i,j,h,k,fact;//,posHold;

	int first=0;
    while (scanf("%s %d", num, &power)!=EOF)
    {
		if (!first)
			first = 1;
		else
		{
			printf("\n");
		}
        fact = 0;
        for (i=0; i<=5; i++)
        {
			if (num[i] != '.')
				fact = fact*10+num[i] - '0';
			else
				pPos = i;
        }
		//posHold = pPos;
        if (!fact)
            ;
        else
        {
            for (i=0; i<105; i++) res[i] = 0;
            for (i=0,j=0; i<=5; i++) 
			{
				if (num[i] != '.')
				{
					res[100+j] = num[i]-'0';
					j++;
				}
			}
            tPos = 100;

            for (i=0; i<power-1; i++)
            {
                for (j=0; j<105-tPos; j++) tRes[j] = fact*res[104-j];
				for (k=0; k<105; k++) res[k] = 0;
                for (h=0; h<j; h++)
                {
                    k=h;
                    while (tRes[h]>0)
                    {
                        res[104-k] += tRes[h]%10;
                        tRes[h] /= 10;
                        k++;
                    }
					if (105-k < tPos)
						tPos = 105-k;
                }
            }
			int tt;
            for (i=104,k=0; i>=tPos; i--)
            {
                tt = (res[i]+k)/10;
                res[i] = (res[i]+k)% 10;
				k = tt;
            }

            h = k;
            i = tPos-1;
            while (h>0 && i)
            {
                res[i] = h%10;
                i--;
                h /=10;
            }

            for (i=tPos,h=0; i<105; i++,h++) output[h] = res[i]+'0';
			output[h] = '\0';

			pPos = (5-pPos)*power; 
			if( h-pPos < 0)
			{
				printf(".");
				int temp = h-pPos;
				char zero[105];
				int t=0;
				while (temp++<0)
					zero[t++] = '0';
				zero[t] = '\0';

				for (i=h-1; output[i] =='0'; i--);
				if (output[i] == '.')
					output[i] = '\0';
				else
					output[i+1] = '\0';
				/*i=0;
				while (output[i]=='0')
					i++;
				for (h=0; output[i]!='\0'; h++,i++)
					output[h] = output[i];
				output[h] = '\0';
				*/
				printf("%s%s",zero,output);
				//printf("%s",zero);

			}
			else
			{
				for (j=h; j>=h-pPos; j--)
				{
					output[j+1] = output[j];
				}
				output[j+1] = '.';
				h++;
			

				for (i=h-1; output[i] =='0'; i--);
				if (output[i] == '.')
					output[i] = '\0';
				else
					output[i+1] = '\0';
				i=0;
				while (output[i]=='0')
					i++;
				for (h=0; output[i]!='\0'; h++,i++)
					output[h] = output[i];
				output[h] = '\0';
        
				printf("%s",output);
			}
        }
    }

}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator