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

该怎么办,,输入七位数就死掉了,出不了结果,六位数中222222以下能过,,超过333333就死掉了,呜呜呜.........

Posted by sophia_philem at 2005-10-12 22:47:43 on Problem 2514
////////////////***************/
#include<iostream>
#include<cmath>
using namespace std;

int length_d2(int n)//n位数集;
{
	return  ( floor(sqrt( (int)pow(10 ,n) -1 ) ) - ceil(sqrt((int)pow(10 ,n-1))) +1) *n;
}
int length_d1( int n)
{
	return 9*(int)pow(10 ,n-1) * n;
}

int compute(int &m , int &d1, int &d2)
{
	int res1=9,res2=0;
	int mid[2];
	int first[2] = {0};
	int len[2],x[2],res[2];
	x[0]=x[1]=m;
	int tag[2]={0};
	int token[2]={0};//纪录对应的j;
	for(int i = 1;;)
	{
		if(tag[0] == 0)  
		{
			len[0] = length_d1(i);
			if(x[0] > len[0] )
			x[0] -= len[0] ;
			else if(x[0] == len[0])
			{
				res[0] = 9;
				tag[0] = 1;
				token[0] = i ;
			}
			else 
			{
				tag[0] = 1;
				token[0] =i ;
			}
		}
		if(tag[1] == 0) 
		{
			len[1]=length_d2(i);
			if(x[1] > len[1]) x[1] -= len[1];
			else 
			{
				tag[1] = 1 ;
				token[1] =i;
			}
		}

		if(tag[1] == 0 ||  tag[0] ==0) i++;
		if(tag[1] == 1 &&  tag[0] ==1)
		{
			mid[0]=x[0]+1 ; mid[1] =x[1]+1;
		
			if(res[0] != 9)//res[0] 处于i 位数集中;
			{
				int l=1;
				while( x[0] > token[0])  x[0] -= token[0],l++;
				int target = (int )pow(10 , token[0] -1) + l - 1;
				int temp=0;
				while(temp < token[0]-x[0])
					target=target/10,temp++;
					res[0] = target% 10;
			}
				if(first[0] == 0) d1 = res[0] ,first[0] =1;
				
				int l = 1;
				while(x[1] > token[1]) x[1] -= token[1], l++;
				int target = ceil (sqrt( int (pow( 10, token[1]-1) ) ) ) + l -1;//原来的数,非平方数;
				target = target *target;
				int temp = 0;
				while(temp < token[1] - x[1])
				target /= 10 , temp++;

				res[1] = target%10 ;  
				if(first[1] != 0) 
				{
					if(res[0] + res[1] != 9)
					{
						d1 += (res[0]+res[1])/10;
						cout<<(d1 + d2)%10<<endl;
						return 0;
					}
					else
					{
						x[0] = mid[0];
						x[1] = mid[1];
						tag[0] = tag[1] = 0;
						continue;
					}
				}
				if(first[1] == 0) d2 =res[1],first[1] = 1;
				
				x[0] = mid[0];
				x[1] =mid[1];
				tag[0]=tag[1]=0;
			}
				
		}//for
	return 0;
}
int main()
{
	int m;
	while(cin>>m &&m != 0)
	{
		int d1 ,d2 ;
		compute(m ,d1 ,d2);		
	}
	return 0;
}

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