NYOJ A+B IV 小数相加(大数问题)

A+B Problem IV

时间限制: 1000 ms  |  内存限制: 65535 KB
难度: 3
描述
acmj最近发现在使用计算器计算高精度的大数加法时很不方便,于是他想着能不能写个程序把这个问题给解决了。
输入
包含多组测试数据
每组数据包含两个正数A,B(可能为小数且位数不大于400)
输出
每组输出数据占一行,输出A+B的结果,结果需要是最简的形式。
样例输入
1.9 0.1
0.1 0.9
1.23 2.1
3 4.0
样例输出
2
1
3.33
7
思路:把两个数当字符串输入,存放到两个数组中。再检测是否有小数点,开两个数组大小为前面两倍,中间一个位置存放小数点,小数点左边存放小数部分,小数点右边存放整数部分(倒着存放)。然后两个倒序后的数组相加,用第三个同等大小的数组存放结果。同时检测整数部分前面的零和小数部分后面的零,去掉多余的零。详细看代码部分。
 
#include<stdio.h>
#include<string.h>
char s1[410],s2[410];
int a1[820],b1[820];
char result[820];
void create(char *s,int *a)
{
	int len=strlen(s);
	int k;
	if(strchr(s,'.')!=NULL) //判断有无小数点 
	k=strchr(s,'.')-s; //标记小数点的位置 
	else
	k=len;             // 无小数点 
	for(int i=k+1,j=399;i<len;i++,j--)//小数点后面的存到前四百位
	a[j]=s[i]-'0'; 
	for(int i=k-1,j=400;i>=0;i--,j++)//小数点前面的存放到后四百位 
	a[j]=s[i]-'0';	
} 
void init()
{
	memset(a1,0,sizeof(a1));
	memset(b1,0,sizeof(b1));
	memset(result,0,sizeof(result));
}
void sum()
{
	int s,v=0;
	for(int i=0;i<820;i++)
	{
	    s=a1[i]+b1[i]+v;
		result[i]=s%10;
		v=s/10;
	} 
}
void print()
{
	int i=820;
	while(result[i]==0&&i>=400)
	{
		i--;
	}
	int j=0;
	while(result[j]==0&&j<400)
	{
		j++;
	}
	if(i==399&&j==400)//全是零的情况
	printf("0\n");
	else
	{
		for(;i>=400;i--)
		{
			printf("%d",result[i]);
		}
		if(j!=400)
		{
		printf(".");
		}
		for(int i=399;i>=j;i--)	
		printf("%d",result[i]); 
		printf("\n");	 
	}
}
int main()
{
while(~scanf("%s %s",s1,s2))
{
	init(); //每计算一次初始化数组
	create(s1,a1);//转化过程(2倍数组倒序存放小数或整数)
	create(s2,b1);//转化过程 
	sum();//进位求和过程 
	print();
}
	return 0;
} 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
x1y2 x2y3 x3y1-x1y3-x2y1-x3y2 是计算三角形面积的公式中的一部分。 在这个公式中,x1、x2、x3分别表示三角形的三个顶点的x坐标,y1、y2、y3分别表示三角形的三个顶点的y坐标。通过计算这个表达式的值,可以得到三角形的面积。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [TetraCluster:使用并行Java 2库的Java并行程序。 该程序在群集并行计算机上运行,​​以从给定的点集中找到...](https://download.csdn.net/download/weixin_42171208/18283141)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [线性代数有个题,求正交变换x=Qy,化二次型f(x1,x2,x3)=8x1x2+8x1x3+8x2x3为标准型求出特征值](https://blog.csdn.net/weixin_39956182/article/details/115882118)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [nyoj-67-三角形面积(S=(1/2)*(x1y2+x2y3+x3y1-x1y3-x2y1-x3y2))](https://blog.csdn.net/weixin_30492601/article/details/99541033)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值