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

📄 高精度加法(整数和浮点)_20061211911.txt

📁 acm 做题和编程时常用的一些算法
💻 TXT
字号:
#include<stdio.h> 
#include<string.h>
#define N 1001
void high_precise_add(char *a,char *b)/*可带小数相加,结果放在a中可用于整数和浮点数高精度相加*/
{
	int i,j,la,lb,pa,pb,p;
	la=strlen(a);lb=strlen(b);
	pa=0;while(pa<la&&a[pa]!='.')pa++;
	if(pa<la){for(j=pa;j<la-1;j++)a[j]=a[j+1];la--;a[la]='\0';}
	pb=0;while(pb<lb&&b[pb]!='.')pb++;
	if(pb<lb){for(j=pb;j<lb-1;j++)b[j]=b[j+1];lb--;b[lb]='\0';}
	p=pa;
	if(pa<pb)
	{
		for(i=la-1;i>=0;i--)a[i+pb-pa]=a[i];
		la+=pb-pa;a[la]='\0';
		for(i=0;i<pb-pa;i++)a[i]='0';
		p=pb;
	} 
	else if(pa>pb)
	{
		for(i=lb-1;i>=0;i--)
			b[i+pa-pb]=b[i];
		lb+=pa-pb;
		b[lb]='\0';
		for(i=0;i<pa-pb;i++)
			b[i]='0';
	}
	else ;
	if(la<lb)
	{
		for(i=la;i<lb;i++)a[i]='0';
		la=lb;a[la]='\0';
	}
	else
	{
		for(i=lb;i<la;i++)b[i]='0';
		lb=la;b[lb]='\0';
	}
	j=0;
	i=la-1;
	while(i>=0)
	{
		pa=j;
		j=(a[i]+b[i]-96+j)/10;
		a[i]=(a[i]+b[i]-96+pa)%10+48;
		i--;
	}

	if(j>0){for(i=la;i>0;i--)a[i]=a[i-1];la++;a[0]=j+48;a[la]='\0';p++;}
	while(la>p&&a[la-1]=='0')la--;
	a[la]='\0';
	if(la>p){for(i=la+1;i>p;i--)a[i]=a[i-1];a[p]='.';a[la+1]='\0';}
}
int main()
{
	char a[N],b[N];
	while(1)
	{
		scanf("%s %s",a,b);
		high_precise_add(a,b);
		printf("%s\n",a);
	}
	return 0;
}

⌨️ 快捷键说明

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