长浮点数的加法
2014-04-07 10:01
351 查看
在做九度的机试题时,感觉C代码能够看到代码的灵魂,但是真正掌握算法后,还是用C++比较好,C++封装的函数非常好用。
#include <iostream>
#include <string>
#include <cstring>
#include <map>
#include <cstdlib>
#include <algorithm>
using namespace std;
int main()
{
string x,y;
string s1,s2,s3,s4,ss;
map<int,char>m,mm;
m[0] = '0';
m[1] = '1';
m[2] = '2';
m[3] = '3';
m[4] = '4';
m[5] = '5';
m[6] = '6';
m[7] = '7';
m[8] = '8';
m[9] = '9';
mm['0'] = 0;
mm['1'] = 1;
mm['2'] = 2;
mm['3'] = 3;
mm['4'] = 4;
mm['5'] = 5;
mm['6'] = 6;
mm['7'] = 7;
mm['8'] = 8;
mm['9'] = 9;
int n;
cin >> n;
while( cin >> x >> y )
{
ss = "";
int position1 = x.find('.');
s1.assign( x, 0, position1 );
s2.assign( x, position1+1, (x.length()- position1-1) );
int position2 = y.find('.');
s3.assign( y, 0, position2 );
s4.assign( y, position2+1, (y.length()- position2-1) );
reverse(s1.begin(),s1.end());
//reverse(s2.begin(),s2.end());
reverse(s3.begin(),s3.end());
//reverse(s4.begin(),s4.end());
int flag1 = 0;
int pa,pb,pc;
if( s1.size() < s3.size())
{
string t = s1;
s1 = s3;
s3 = t;
}
for( int j = 0; j < s1.size(); j++ )
{
pa = mm[s1[j]];
if( j > s3.size())
pb = 0;
else pb = mm[s3[j]];
pc = pa + pb + flag1;
if( pc > 9 )
{
pc = pc - 10;
flag1 = 1;
}
else
flag1 = 0;
s1[j] = m[pc];
}
if(flag1 == 1 )
s1 += "1";
int flag2 = 0;
int pa1,pb1,
4000
pc1;
if( s2.size() < s4.size())
{
string k = s2;
s2 = s4;
s4 = k;
}
for( int j = s2.size(); j >= 0; j-- )
{
pa1 = mm[s2[j]];
if( j > s4.size())
pb1 = 0;
else pb1 = mm[s4[j]];
pc1 = pa1 + pb1 + flag2;
if( pc1 > 9 )
{
pc1= pc1 -10;
flag2 = 1;
}
else
flag2 = 0;
s2[j] = m[pc1];
}
if(flag2 == 1 )
ss = "1";
int flag3 = 0;
int pa2,pb2,pc2;
if( s1.size() < ss.size())
{
string t = s1;
s1 = ss;
ss = t;
}
for( int j = 0; j < s1.size(); j++ )
{
pa2 = mm[s1[j]];
if( j > ss.size())
pb2 = 0;
else pb2 = mm[ss[j]];
pc2 = pa2 + pb2 + flag3;
if( pc2 > 9 )
{
pc2 = pc2 -10;
flag3 = 1;
}
else
flag3 = 0;
s1[j] = m[pc2];
}
if(flag3 == 1 )
s1 += "1";
int count;
reverse(s2.begin(),s2.end());
for( int i = 0; i <= s2.size(); i++ )
{
if( s2[i] != '0' )
{
count = i;
break;
}
}
string sr;
sr.assign(s2,count,s2.size()-count);
reverse(s1.begin(),s1.end());
reverse(sr.begin(),sr.end());
cout << s1 << "." << sr << endl;
}
return 0;
}
#include <iostream>
#include <string>
#include <cstring>
#include <map>
#include <cstdlib>
#include <algorithm>
using namespace std;
int main()
{
string x,y;
string s1,s2,s3,s4,ss;
map<int,char>m,mm;
m[0] = '0';
m[1] = '1';
m[2] = '2';
m[3] = '3';
m[4] = '4';
m[5] = '5';
m[6] = '6';
m[7] = '7';
m[8] = '8';
m[9] = '9';
mm['0'] = 0;
mm['1'] = 1;
mm['2'] = 2;
mm['3'] = 3;
mm['4'] = 4;
mm['5'] = 5;
mm['6'] = 6;
mm['7'] = 7;
mm['8'] = 8;
mm['9'] = 9;
int n;
cin >> n;
while( cin >> x >> y )
{
ss = "";
int position1 = x.find('.');
s1.assign( x, 0, position1 );
s2.assign( x, position1+1, (x.length()- position1-1) );
int position2 = y.find('.');
s3.assign( y, 0, position2 );
s4.assign( y, position2+1, (y.length()- position2-1) );
reverse(s1.begin(),s1.end());
//reverse(s2.begin(),s2.end());
reverse(s3.begin(),s3.end());
//reverse(s4.begin(),s4.end());
int flag1 = 0;
int pa,pb,pc;
if( s1.size() < s3.size())
{
string t = s1;
s1 = s3;
s3 = t;
}
for( int j = 0; j < s1.size(); j++ )
{
pa = mm[s1[j]];
if( j > s3.size())
pb = 0;
else pb = mm[s3[j]];
pc = pa + pb + flag1;
if( pc > 9 )
{
pc = pc - 10;
flag1 = 1;
}
else
flag1 = 0;
s1[j] = m[pc];
}
if(flag1 == 1 )
s1 += "1";
int flag2 = 0;
int pa1,pb1,
4000
pc1;
if( s2.size() < s4.size())
{
string k = s2;
s2 = s4;
s4 = k;
}
for( int j = s2.size(); j >= 0; j-- )
{
pa1 = mm[s2[j]];
if( j > s4.size())
pb1 = 0;
else pb1 = mm[s4[j]];
pc1 = pa1 + pb1 + flag2;
if( pc1 > 9 )
{
pc1= pc1 -10;
flag2 = 1;
}
else
flag2 = 0;
s2[j] = m[pc1];
}
if(flag2 == 1 )
ss = "1";
int flag3 = 0;
int pa2,pb2,pc2;
if( s1.size() < ss.size())
{
string t = s1;
s1 = ss;
ss = t;
}
for( int j = 0; j < s1.size(); j++ )
{
pa2 = mm[s1[j]];
if( j > ss.size())
pb2 = 0;
else pb2 = mm[ss[j]];
pc2 = pa2 + pb2 + flag3;
if( pc2 > 9 )
{
pc2 = pc2 -10;
flag3 = 1;
}
else
flag3 = 0;
s1[j] = m[pc2];
}
if(flag3 == 1 )
s1 += "1";
int count;
reverse(s2.begin(),s2.end());
for( int i = 0; i <= s2.size(); i++ )
{
if( s2[i] != '0' )
{
count = i;
break;
}
}
string sr;
sr.assign(s2,count,s2.size()-count);
reverse(s1.begin(),s1.end());
reverse(sr.begin(),sr.end());
cout << s1 << "." << sr << endl;
}
return 0;
}
相关文章推荐
- 关于指针的一些事情
- 动易2006序列号破解算法公布
- C#数据结构与算法揭秘二
- C/C++数据对齐详细解析
- C++中引用的使用总结
- C与C++之间相互调用实例方法讲解
- C++中引用(&)的用法与应用实例分析
- 浅析STL中的常用算法
- 解析C++ 浮点数的格式化输出
- 深入分析C++中几个最不常用的关键字
- c++中inline的用法分析
- C++ Primer 第一部分基本语言
- 深入解析C++ Data Member内存布局
- 从汇编看c++中默认构造函数的使用分析
- 关于C++中的友元函数的一些总结
- C++的sstream标准库详细介绍
- 基于C++自动化编译工具的使用详解
- 浅谈C++中的string 类型占几个字节
- C/C++ 宏详细解析
- 深入分析C++中两个大数相乘结果不正确的问题