• UVa748


    题目地址:点击打开链接

    把浮点数当成整数来乘,最后再加上小数点即可。

    C++代码:

    #include <cstdio>
    #include <cstring>
    const int maxnum=100000;
    char s1[maxnum],s2[maxnum],ans[maxnum],temps[maxnum];
    void add(char s[])
    {
    	int len_min=strlen(s)>strlen(ans)?strlen(ans):strlen(s);
    	int len_max=strlen(s)<strlen(ans)?strlen(ans):strlen(s);
    	int i;
    	int c=0;
    	for(i=0;i<len_min;++i)
    	{
    		int a=s[i]-'0'+ans[i]-'0'+c;
    		ans[i]=a%10+'0';
    		c=a/10;
    	}
    	for(i=len_min;i<len_max;++i)
    	{
    		int a=s[i]+ans[i]-'0'+c;
    		ans[i]=a%10+'0';
    		c=a/10;
    	}
    	if(c!=0)
    		ans[i]=c+'0';
    }
    void multi(char s1[],int x,int n)
    {
    	memset(temps,0,sizeof(temps));
    	int c=0;
    	int i;
    	int len=strlen(s1);
    	for(i=0;i<len;++i)
    	{
    		int a=(s1[i]-'0')*x+c;
    		temps[i]=a%10+'0';
    		c=a/10;
    	}
    	if(c!=0)
    		temps[len++]=c+'0';
    	for(i=len-1;i>=0;--i)
    		temps[i+n]=temps[i];
    	for(i=0;i<n;++i)
    		temps[i]='0';
    	add(temps);
    }
    void switch_str(char s[])
    {
    	int i=0;
    	int j=strlen(s)-1;
    	for(;i<j;++i,--j)
    	{
    		char c=s[i];
    		*(s+i)=s[j];
    		*(s+j)=c;
    	}
    }
    int main()
    {
    	char num1[100];
    	int n;
    	int dot;
    	while(scanf("%s %d",num1,&n)!=EOF)
    	{
    		memset(ans,0,sizeof(ans));
    		memset(s1,0,sizeof(s1));
    		memset(s2,0,sizeof(s2));
    		int i,j;
    		dot=0;
    		for(i=strlen(num1)-1;i>=0;--i)
    		{
    			if(num1[i]=='.')
    				break;
    			dot++;
    		}
    		if(i<0)
    			dot=0;
    		int flag=0;
    		for(i=0;num1[i]!=0;++i)
    		{
    			if(num1[i]!='.')
    				s1[i-flag]=num1[i];
    			else
    				flag=1;
    		}
    		s1[i]=0;
    		switch_str(s1);
    		strcpy(s2,s1);
    		strcpy(ans,s1);
    		for(j=1;j<n;++j)
    		{
    			memset(s1,0,sizeof(s1));
    			strcpy(s1,ans);
    			memset(ans,0,sizeof(ans));
    			for(i=0;i<(int)strlen(s2);++i)
    				multi(s1,s2[i]-'0',i);
    		}
    		for(i=maxnum-1;i>=0&&(ans[i]==0||ans[i]=='0');--i)
    			ans[i]=0;
    		dot=dot*n;
    		if(strlen(ans)<=dot)
    		{
    			printf(".");
    			for(i=dot-1;i>strlen(ans)-1;--i)
    				printf("0");
    			for(;i>=0;--i)
    				printf("%c",ans[i]);
    			printf("
    ");
    		}
    		else
    		{
    			for(i=strlen(ans)-1;i>dot-1;--i)
    				printf("%c",ans[i]);
    			flag=1;
    			for(j=0;j<=i;++j)
    			{
    				if(ans[j]!='0')
    				{
    					flag=0;
    					break;
    				}
    			}
    			if(j>i)
    				printf("
    ");
    			else
    			{
    				printf(".");
    				for(;i>=j;--i)
    					printf("%c",ans[i]);
    				printf("
    ");
    			}
    		}
    	}
    	return 0;
    }


  • 相关阅读:
    Java 时区转换(UTC+8 到 UTC 等等)
    spring 与 springmvc 的区别和定义
    字符串加密解密(Base64)
    上传视频本地预览问题
    vue 监听store中的数值
    判断对象是否为空
    正则 验证是否包含特殊字符
    js 过滤日期格式
    vue methods computed watch区别
    for + setTimeout
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3253755.html
Copyright © 2020-2023  润新知