⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 高精度相乘(整数和浮点数)_200612119111.txt

📁 里面包括了一些acm比赛是常用的函数
💻 TXT
字号:
#include<stdio.h>
#include<string.h>
#define N 1000
/*2.3*1.1=2.53 ;22*11=242*/
void multy(char *a,char *b)/*可用于高精度整数和高精度浮点数相乘,结果放在a中*/
{
	int i,j,da,db,la,lb,lta,ltb;
	da=db=0;
	la=strlen(a);
	lb=strlen(b);
	if(la>lb)
	{
		char tcc[N];
		strcpy(tcc,a);
		strcpy(a,b);
		strcpy(b,tcc);
		int xxy=la;
		la=lb;
		lb=xxy;
	}
	for(i=la-1;i>=0;i--)
		if(a[i]=='.')
		{
			da=la-1-i;
			for(j=i;j<la-1;j++)
				a[j]=a[j+1];
			la--;
			break;
		}
		
		for(i=lb-1;i>=0;i--)
			if(b[i]=='.')
			{
				db=lb-1-i;
				for(j=i;j<lb-1;j++)
					b[j]=b[j+1];
				lb--;
				break;
			}
			lta=ltb=0;
			int c,tc;//jin wei
			char ta[N],tb[N];
			int itb=0,ita=0;
			for(i=la-1;i>=0;i--)
			{
				itb=0;
				tc=c=0;
				for(j=lb-1;j>=0;j--)
				{
					tc=c;
					c=(c+(a[i]-'0')*(b[j]-'0'))/10;
					tb[itb++]=(tc+(a[i]-'0')*(b[j]-'0'))%10+'0';
				}
				if(c>0)tb[itb++]=c+'0';
				if(i!=la-1)
				{
					if(ita-(la-i-1)>itb)
					{
						for(j=itb;j<ita-(la-i-1);j++)
							tb[j]='0';
						itb=ita-(la-i-1);
						
					}
					else
					{
						for(j=ita;j<itb+(la-i-1);j++)
							ta[j]='0';
						ita=itb+(la-i-1);
						
					}
					c=0;
					for(j=0;j<itb;j++)
					{
						tc=c;
						c=(tc+tb[j]-'0'+ta[j+la-i-1]-'0')/10;
						ta[j+la-i-1]=(tc+tb[j]-'0'+ta[j+la-i-1]-'0')%10+'0';
					}
					if(c>0)ta[ita++]=c%10+'0';
				}
				else
				{
					for(j=0;j<itb;j++)
						ta[j]=tb[j];
					ita=itb;
				}
			}
			
			if(da+db!=0)
			{
				for(i=ita;i>da+db;i--)ta[i]=ta[i-1];
				ta[i]='.';
				ita++;
				while(ta[ita-1]=='0'&&ta[ita-2]!='.')ita--;
				ta[ita]='\0';i=0;
				while(ta[i]=='0')i++;
				if(ta[i]=='.')i++;
				for(j=0;i<ita;i++,j++)ta[j]=ta[i];
				ita=j;ta[j]='\0';				
			}
			else
			{
				while(ta[ita-1]=='0'&&ita>1){ta[ita-1]='\0';ita--;}
			}
			j=ita/2;
			char temc;
			for(i=0;i<j;i++)
			{
				temc=ta[i];
				ta[i]=ta[ita-1-i];
				ta[ita-1-i]=temc;
			}
			
			ta[ita]='\0';
			strcpy(a,ta);
}
int main()
{
	char a[N],b[N];
	int i,j;
	while(1)
	{

		scanf("%s %s",a,b);
		multy(a,b);
		printf("%s\n",a);
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -