[九度OJ]1137.浮点数加法
原题链接:http://ac.jobdu.com/problem.php?pid=1137
- 题目描述:
-
求2个浮点数相加的和
题目中输入输出中出现浮点数都有如下的形式:
P1P2...Pi.Q1Q2...Qj
对于整数部分,P1P2...Pi是一个非负整数
对于小数部分,Qj不等于0
- 输入:
-
对于每组案例,第1行是测试数据的组数n,每组测试数据占2行,分别是两个加数。
每组测试数据之间有一个空行,每行数据不超过100个字符
- 输出:
-
每组案例是n行,每组测试数据有一行输出是相应的和。
输出保证一定是一个小数部分不为0的浮点数
- 样例输入:
-
2
0.111111111111111111111111111111
0.111111111111111111111111111111 10000000.655555555555555555555555555555
1.444444444444444444444444444445
- 样例输出:
0.222222222222222222222222222222
10000002.1
- 题解:
- 我的做法是去小数点,即统一乘以10n次方,这个n是两个数中小数点位数较大的一个,然后用大数相加,最后再把小数点加上,多余的0去掉。代码如下:
#include <cstdio>
#include <string.h>
#include <stdlib.h>
using namespace std;
int n;
char a[];
char b[];
char c[]; int remove(char* a,char c){
char *p;
int pos=;
int i;
for(p=a,i=strlen(a)-; *p!='\0'; p++,i--){
if(*p==c){
pos = i;
char* q;
for(q=p;*q!='\0'; q++){
*q = *(q+);
}
}
}
return pos;
} void add(char* a,char* b,char* c)
{
int i,j,k,max,min,n,temp;
char *s,*pmax,*pmin; max=strlen(a);
min=strlen(b); if (max<min)
{
temp=max;
max=min;
min=temp;
pmax=b;
pmin=a;
}
else
{
pmax=a;
pmin=b;
}
s=(char*)malloc(sizeof(char)*(max+));
s[]='';
//相加,不考虑进位
for (i=min-,j=max-,k=max;i>=;i--,j--,k--)
s[k]=pmin[i]-''+pmax[j];
//长串的多余的加上去
for (;j>=;j--,k--)
s[k]=pmax[j];
for (i=max;i>=;i--)
if (s[i]>'')
{
s[i]-=;
s[i-]++;
}
if (s[]=='')
{
for (i=;i<=max;i++)
c[i-]=s[i];
c[i-]='\0';
}
else
{
for (i=;i<=max;i++)
c[i]=s[i];
c[i]='\0';
}
free(s); }
void addZero(char *a,int n)
{
int len = strlen(a);
int i;
for(i=; i<n; i++)
{
a[len+i] = '';
}
a[len+i] = '\0';
}
void removeLast(char* a)
{
int len = strlen(a);
for(int i=len-; i>=; i--)
{
if(a[i]=='')
a[i] = '\0';
else
break;
}
}
void addPoint(char* a,int n)
{
int i,j;
for(i=strlen(a),j=; j<=n; i--,j++)
{
a[i+] = a[i];
}
a[i+] = '.';
}
int main()
{
// freopen("1137.in","r",stdin);
// freopen("1137.out","w",stdout); scanf("%d",&n);
int apos,bpos;
while(n--)
{
scanf("%s %s",a,b);
apos = remove(a,'.');
bpos = remove(b,'.');
if(apos>bpos)
{
addZero(b,apos-bpos);
add(a,b,c);
addPoint(c,apos);
removeLast(c);
printf("%s\n",c);
}else if(apos<bpos)
{
addZero(a,bpos-apos);
add(a,b,c);
addPoint(c,bpos);
removeLast(c);
printf("%s\n",c);
}else
{
add(a,b,c);
addPoint(c,apos);
removeLast(c);
printf("%s\n",c);
} } return ;
}
[九度OJ]1137.浮点数加法的更多相关文章
- 九度OJ 1137:浮点数加法 (大数运算)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2725 解决:736 题目描述: 求2个浮点数相加的和 题目中输入输出中出现浮点数都有如下的形式: P1P2...Pi.Q1Q2...Qj ...
- 【九度OJ】题目1137:浮点数加法 解题报告
[九度OJ]题目1137:浮点数加法 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1137 题目描述: 求2个浮点数相加的 ...
- 【九度OJ】题目1435:迷瘴 解题报告
[九度OJ]题目1435:迷瘴 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1435 题目描述: 通过悬崖的yifenfei,又面临 ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度OJ 1502 最大值最小化(JAVA)
题目1502:最大值最小化(二分答案) 九度OJ Java import java.util.Scanner; public class Main { public static int max(in ...
- 九度OJ,题目1089:数字反转
题目描述: 12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,现在又任意两个正整数,问他们两个数反转的和是否等于两个数的和的反转. 输入: 第一行一个正整数表示测试数据的个数n. ...
- 九度OJ 1500 出操队形 -- 动态规划(最长上升子序列)
题目地址:http://ac.jobdu.com/problem.php?pid=1500 题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往 ...
- 九度OJ 1531 货币面值(网易游戏2013年校园招聘笔试题) -- 动态规划
题目地址:http://ac.jobdu.com/problem.php?pid=1531 题目描述: 小虎是游戏中的一个国王,在他管理的国家中发行了很多不同面额的纸币,用这些纸币进行任意的组合可以在 ...
- 九度OJ 1024 畅通工程 -- 并查集、贪心算法(最小生成树)
题目地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但 ...
随机推荐
- [python]使用ElementTree解析XML【译】
19.7 The ElementTree XML API 源码:Lib/xml/etree/ElementTree.py Element类型是一个灵活的容器对象,设计出来是用于存储有层次的数据结构到内 ...
- 【git】切换分支获取代码
Welcome to Git (version 1.9.5-preview20150319) Run 'git help git' to display the help index.Run 'git ...
- cocos2dx3.4 保存json文件
头文件: #include "json/document.h" #include "json/stringbuffer.h" #include "js ...
- Shell编程练习
1.使用case语句 2.使用while....do....done语句 3.使用
- Memcached(五)Memcached的并发实例
package com.sinosuperman.memcached; import java.io.IOException; import java.net.InetSocketAddress; i ...
- WindowsPhone客户端第一次审核失败记录
微软返回失败pdf,其中2.7.2和2.7.3没有通过,原因是: 1. 没有提供隐私策略,所以在提交App要填写的隐私策略url里加了隐私策略的网址链接. 2. 由于使用了定位服务,所以第一次进入应用 ...
- [JavaScript] 初中级Javascript程序员必修学习目录
很多人总感觉javascript无法入门,笔者在这里写一下自己的学习过程,以及个人认 为的最佳看书过程,只要各位能按照本人所说步骤走下去,不用很长时间,坚持 个3个月,你的js层级会提高一个档次,无他 ...
- csuoj 1353: Guessing the Number
这个题我想到要用kmp找到循环节: 但是后面的我就不会做了: 看到题解才知道是字符串的最小表示: #include<cstdio> #include<cstring> #inc ...
- js amd
http://www.ruanyifeng.com/blog/2012/10/asynchronous_module_definition.html http://www.adequatelygood ...
- (重)POJ 3020Antenna Placement
http://poj.org/problem?id=3020 呃...这个题不是很会,所以找了大神的博客做了参考,说得很详细 http://blog.csdn.net/lyy289065406/art ...