题目1137:浮点数加法
来源:互联网 发布:女生做网络编辑好吗 编辑:程序博客网 时间:2024/05/17 08:34
#include <stdio.h>
#include <string.h>
#define MAX 1010
struct flt{
int p[MAX]; // 整数部分
int q[MAX]; // 小数部分
int p_size;
int q_size;
void init(){
for(int i = 0; i < MAX; i ++){
p[i] = 0;
q[i] = 0;
}
p_size = 0;
q_size = 0;
}
flt operator + (const flt &a) const{
flt ret;
ret.init();
int qlen = q_size > a.q_size ? q_size : a.q_size;
int carry = 0;
ret.q_size = qlen;
for(int i = qlen - 1; i >= 0; i --){ // 小数部分先相加
int tmp = q[i] + a.q[i] + carry;
ret.q[-- qlen] = tmp % 10;
carry = tmp / 10;
}
int plen = p_size > a.p_size ? p_size : a.p_size;
for(int j = 0; j < plen; j ++){ // 整数部分相加
int tmp = p[j] + a.p[j] + carry;
ret.p[ret.p_size ++] = tmp % 10;
carry = tmp / 10;
}
if(carry != 0)
ret.p[ret.p_size ++] = carry;
return ret;
}
void output(){
int i = p_size - 1;
while(p[i] == 0 && i > -1) i --; // 去除结果前多余的0
if(i == -1){
printf("0");
}else{
while(i > -1){
printf("%d",p[i --]);
}
}
int j = q_size - 1;
while(q[j] == 0 && j > -1) j --; // 去除结果后面多余的0
if(j != -1){
printf(".");
int k = 0;
while(k < j + 1)
printf("%d",q[k ++]);
}
printf("\n");
}
};
flt change(char s[]){
flt tmp;
tmp.init();
int p;
for(p = 0; s[p] != '.'; p ++) ; // 查找.的位置
int len = strlen(s);
for(int i = p + 1; i < len; i ++) //小数,正着放,.12345,放入后是.12345
tmp.q[tmp.q_size ++] = s[i] - '0';
for(int j = p - 1; j >= 0; j --) //整数,反着放,12345.放入后是54321.
tmp.p[tmp.p_size ++] = s[j] - '0';
return tmp;
}
int main(){
int n;
while(~scanf("%d",&n)){
while(n --){
char str1[MAX],str2[MAX];
scanf("%s%s",str1,str2);
flt a,b,c;
a.init(); b.init(); c.init();
a = change(str1);
b = change(str2);
c = a + b;
c.output();
}
}
return 0;
}
#include <string.h>
#define MAX 1010
struct flt{
int p[MAX]; // 整数部分
int q[MAX]; // 小数部分
int p_size;
int q_size;
void init(){
for(int i = 0; i < MAX; i ++){
p[i] = 0;
q[i] = 0;
}
p_size = 0;
q_size = 0;
}
flt operator + (const flt &a) const{
flt ret;
ret.init();
int qlen = q_size > a.q_size ? q_size : a.q_size;
int carry = 0;
ret.q_size = qlen;
for(int i = qlen - 1; i >= 0; i --){ // 小数部分先相加
int tmp = q[i] + a.q[i] + carry;
ret.q[-- qlen] = tmp % 10;
carry = tmp / 10;
}
int plen = p_size > a.p_size ? p_size : a.p_size;
for(int j = 0; j < plen; j ++){ // 整数部分相加
int tmp = p[j] + a.p[j] + carry;
ret.p[ret.p_size ++] = tmp % 10;
carry = tmp / 10;
}
if(carry != 0)
ret.p[ret.p_size ++] = carry;
return ret;
}
void output(){
int i = p_size - 1;
while(p[i] == 0 && i > -1) i --; // 去除结果前多余的0
if(i == -1){
printf("0");
}else{
while(i > -1){
printf("%d",p[i --]);
}
}
int j = q_size - 1;
while(q[j] == 0 && j > -1) j --; // 去除结果后面多余的0
if(j != -1){
printf(".");
int k = 0;
while(k < j + 1)
printf("%d",q[k ++]);
}
printf("\n");
}
};
flt change(char s[]){
flt tmp;
tmp.init();
int p;
for(p = 0; s[p] != '.'; p ++) ; // 查找.的位置
int len = strlen(s);
for(int i = p + 1; i < len; i ++) //小数,正着放,.12345,放入后是.12345
tmp.q[tmp.q_size ++] = s[i] - '0';
for(int j = p - 1; j >= 0; j --) //整数,反着放,12345.放入后是54321.
tmp.p[tmp.p_size ++] = s[j] - '0';
return tmp;
}
int main(){
int n;
while(~scanf("%d",&n)){
while(n --){
char str1[MAX],str2[MAX];
scanf("%s%s",str1,str2);
flt a,b,c;
a.init(); b.init(); c.init();
a = change(str1);
b = change(str2);
c = a + b;
c.output();
}
}
return 0;
}
0 0
- 题目1137:浮点数加法
- 题目1137:浮点数加法
- 【WA】题目1137:浮点数加法
- 63-题目1137:浮点数加法
- 题目63:浮点数加法
- 题目1137:浮点数加法 (错在哪?)
- 九度OJ 题目1137:浮点数加法
- 【九度OJ】题目1137:浮点数加法 解题报告
- 题目1137:浮点数加法 九度OJ
- 九度OJ 1137 浮点数加法
- 九度[1137]-浮点数加法
- OJ_1137 浮点数加法
- 大数浮点数加法
- 浮点数加法
- 浮点数加法
- 浮点数的大数加法
- 长浮点数的加法
- 出乎意料的浮点数加法
- VS2013服务器资源管理器添加Mysql数据源
- 多线程编程练习:使用变量控制多线程调用顺序
- OnCtrlColor,OnDrawItem,DrawItem,OnPaint之间关系
- ado.net视频教程-实战开发CRM企业客户管理系统
- App Store上面上传新的项目版本
- 题目1137:浮点数加法
- 旱冰场面积(面向对象)
- 项目开发经验(待完善)
- 如何让浮躁的心回归安静
- 求两个整数的最大公约数的程序
- 面向对象输出
- C#总结
- Linq in 与 not in
- php 出错总结