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

Re:终于ac, 总结下

Posted by zhangyunfeng at 2011-09-10 17:39:28 on Problem 1001
In Reply To:终于ac, 总结下 Posted by:robertbean at 2011-09-06 20:05:36
> 新手呵呵,自我反省。
> 
> 输入时 没有检查 = 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