All pastes #915049 Raw Edit

Someone

public text v1 · immutable
#915049 ·published 2008-02-23 13:38 UTC
rendered paste body
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

void strrev1(char*str)
{
	int k=0,i;
	char*ans=(char*)malloc(30);
	for(i=strlen(str)-1;i>=0;i--)
		ans[k++]=str[i];
	ans[k]='\0';
	strcpy(str,ans);
}

char*Add(char*str1,char*str2)
{
	int carry=0,i,k=0;
	char*ans=(char*)malloc(30);
	strcpy(ans,"");
	strrev1(str1);
	strrev1(str2);
	for(i=0;i<strlen(str1) && i<strlen(str2);i++)
	{
		ans[k++]=(str1[i]-'0'+str2[i]-'0'+carry)%10+'0';
		carry=(str1[i]-'0'+str2[i]-'0'+carry)/10;
	}
	while(i<strlen(str1))
	{
		ans[k++]=(carry+str1[i]-'0')%10+'0';
		carry=(carry+str1[i]-'0')/10;
		i++;
	}
	while(i<strlen(str2))
	{
		ans[k++]=(carry+str2[i]-'0')%10+'0';
		carry=(carry+str2[i]-'0')/10;
		i++;
	}
	if(carry!=0)
		ans[k++]=carry+'0';
	ans[k]='\0';
	strrev1(ans);
	strrev1(str1);
	strrev1(str2);

	while(ans[0]=='0')
		ans++;
	return ans;
}

char*g(char*n)
{
	char*ans=(char*)malloc(30);
	char*i=(char*)malloc(30);
	strcpy(i,"0");
	strcpy(ans,"0");
	while((strlen(ans)<strlen(n)) || ((strlen(ans)==strlen(n) && (strcmp(ans,n)<=0))))
	{
		i=Add(i,"1");
		ans=Add(ans,i);
	}
	return i;
}

char*f(char*n)
{
	int k=0,flag=0;
	char*ans=(char*)malloc(30);
	char*sum=(char*)malloc(30);
	char*tempSum=(char*)malloc(30);
	char*i=(char*)malloc(30);
	char*j=(char*)malloc(30);
	strcpy(i,"0");
	strcpy(j,"0");
	strcpy(ans,"0");
	strcpy(sum,"0");
	strcpy(tempSum,"0");

	for(strcpy(i,"1");((strlen(sum)<strlen(n)) || ((strlen(sum)==strlen(n) && (strcmp(sum,n)<0))));i=Add(i,"1"))
	{
		for(strcpy(j,"1");(strlen(j)<strlen(i)) || (strlen(j)==strlen(i) && (strcmp(j,i)<=0));j=Add(j,"1"))
		{
			strcpy(tempSum,sum);
			for(k=0;k<atoi(j);k++)
				sum=Add(sum,i);
			if((strlen(n)<strlen(sum)) || ((strlen(n)==strlen(sum) && (strcmp(n,sum)<=0))))
			{
				ans=Add(ans,j);
				flag=1;
				break;
			}
			else if(strcmp(j,i)!=0)
				strcpy(sum,tempSum);
		}
		if(flag!=1)
			ans=Add(ans,i);
	}
	return ans;
}


int main()
{
	int t;
	scanf(" %d",&t);
	while(t--)
	{
		char*n=(char*)malloc(30);
		scanf("%s",n);
		printf("%s",f(g(n)));
	}
	return 0;
}