HDUOJ-------1753大明A+B(大数之小数加法)
时间:2022-05-05
本文章向大家介绍HDUOJ-------1753大明A+B(大数之小数加法),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
大明A+B
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7545 Accepted Submission(s): 2662
Problem Description
话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。 这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。 现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
Input
本题目包含多组测试数据,请处理到文件结束。 每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
Output
请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。
Sample Input
1.1 2.9
1.1111111111 2.3444323343
1 1.1
Sample Output
4
3.4555434454
2.1
Author
linle
Source
代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 #define maxn 405
5 char sa[maxn],sb[maxn];
6 struct node
7 {
8 int NN[405],point[405];
9 int pos,nlen;
10 void init()
11 {
12 memset(NN,0,sizeof(NN));
13 memset(point,0,sizeof(point));
14 }
15 };
16 node aa,bb;
17 void cal(char *str,node *p) //将大小数分解
18 {
19 int i,k,j=0,temp;
20 p->pos=strlen(str)-1;
21 for(i=0;str[i]!='.'&&i<=p->pos;i++)
22 p->NN[j++]=str[i]-'0';
23 for(k=i-1,j=0;k>j;k--,j++){
24 temp=p->NN[k];
25 p->NN[k]=p->NN[j];
26 p->NN[j]=temp;
27 }
28 if(i<=p->pos) p->nlen=i++; //NN长度点位置
29 else p->nlen=p->pos;
30 p->pos-=p->nlen ; //小数位数
31 for(j=0;i<strlen(str);i++)
32 p->point[j++]=str[i]-'0'; //不进行逆序
33 }
34 void work(node sa ,node sb){
35 int i,j,cc,maxc,minc,p_len=0;
36 if(sa.pos>sb.pos){
37 minc=sb.pos;
38 maxc=sa.pos;
39 }
40 else{
41 minc=sa.pos;
42 maxc=sb.pos;
43 }
44 cc=0;
45 p_len=maxc-1;
46 for(i=maxc-1;i>=0;i--){
47 sa.point[i]+=sb.point[i]+cc;
48 cc= sa.point[i]/10;
49 sa.point[i]%=10;
50 }
51 if(sa.nlen>sb.nlen){
52 maxc=sa.nlen;
53 minc=sb.nlen;
54 }
55 else{
56 maxc=sb.nlen;
57 minc=sa.nlen;
58 }
59 //判断小数点是否进
60 maxc++;
61 for(i=0,j=0;j<=maxc;j++){
62 sa.NN[j]+=sb.NN[i++]+cc ;
63 cc=sa.NN[j]/10 ;
64 sa.NN[j]%=10 ;
65 }
66 while(maxc>0&&sa.NN[maxc]==0) maxc--;
67 while(maxc>=0)
68 printf("%d",sa.NN[maxc--]);
69 i=0;
70 while(sa.point[p_len]==0) p_len--;
71 if(i<=p_len) printf(".");
72 for(j=i;j<=p_len;j++)
73 printf("%d",sa.point[j]);
74 printf("n");
75 }
76 int main()
77 {
78 while(scanf("%s%s",sa,sb)!=EOF)
79 {
80 aa.init();
81 bb.init();
82 cal(sa,&aa);
83 cal(sb,&bb);
84 work(aa,bb);
85 }
86 return 0;
87 }
- 通过自定义ServiceHost实现对WCF的扩展[原理篇]
- python使用rsa库做公钥解密(网上别处找不到)
- 通过“四大行为”对WCF的扩展[原理篇]
- WCF客户端运行时架构体系详解[下篇]
- WCF客户端运行时架构体系详解[上篇]
- WCF服务端运行时架构体系详解[续篇]
- [WCF-Discovery] 实例演示:如何利用服务发现机制实现服务的“动态”调用?
- [WCF-Discovery]服务如何能被”发现”
- 我的数据访问函数库的源代码(一)—— 共用部分
- 《WCF服务编程》关于“队列服务”一个值得商榷的地方
- 我的数据访问函数库的源代码(二)—— SQL语句部分
- 来源于WCF的设计模式:可扩展对象模式[上篇]
- 我的数据访问函数库的源代码(三)——返回结构数组
- 我的数据访问函数库的源代码(四)—— 存储过程部分,包括存储过程的参数的封装
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何通过程序(java代码)提高你的博客访问量
- zabbix_get [12429]: Check access restrictions in Zabbix agent configuration
- 【设计模式】689- TypeScript 设计模式之观察者模式
- Found a swap file by the name ".jsidInspector.py.swp"
- CentOs7下部署tomcat文件服务器
- 【拓展】未来的JavaScript记录与元组
- 【Vuejs】690- Vue新特性:CSS 中使用 JS 变量
- Zabbix监控之从Kafka中获取消费进度和lag
- 将UTC(字符串包含TZ的时间)时间转换成本地时间 python
- centos7安装telnet服务
- linux vim编辑器之环境设置
- JAVA实现UTC时间转换成北京时间
- JDK8 LocalDateTime转换成时间戳
- Grafana创建zabbix自定义template(模板)
- 一条SQL引发的“血案”: