All pastes #915115 Raw Edit

Anuj Joshi

public c v1 · immutable
#915115 ·published 2008-02-23 14:57 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;}