面试题大数相加相减
来源:互联网 发布:网络广西乞丐唱歌视频 编辑:程序博客网 时间:2024/06/05 08:16
根据http://www.cnblogs.com/caixu/archive/2011/09/26/2192189.html这个修改了相加函数,并增加了相减函数。
#include <iostream>
#include <string>
using namespace std;const int MAX_LENGTH = 1000;
class ds
{
public:
void add(string x, string y);
void sub(string x, string y);
private :
string s1,s2;
};
void ds::sub(string x, string y)
{
int length1 = x.length();
int length2 = y.length();
int long_length;
int short_length;
string bigger_string;
string smaller_string;
int i = 0;
int big = -1;
if (length1 > length2) {
bigger_string = x;
smaller_string = y;
long_length = length1;
short_length = length2;
} else if (length1 < length2) {
bigger_string = y;
smaller_string = x;
long_length = length2;
short_length = length1;
big = 2;
} else {
for (i = 0; i< length1; i++) {
int sub_value = x[length1-1-i] - y[length1-1-i];
if(sub_value > 0) {
bigger_string = x;
smaller_string = y;
big = 0;
break;
}
else if (sub_value < 0) {
bigger_string = y;
smaller_string = x;
big = 1;
break;
}
else{}
}
if (-1 == big) {
cout << "0" << endl;
return;
}
}
int sub = 0;
int flag = 0;
int sub_sum[MAX_LENGTH];
for (i = 0; i<short_length;i++) {
sub = bigger_string[long_length-1-i] - smaller_string[short_length-1-i];
if (sub <0) {
sub += 10;
flag = 1;
} else {
flag = 0;
}
if(1 == flag)
bigger_string[long_length-1-i-1] -= ('1' - '0');
sub_sum[i] = sub;
}
for(i; i<long_length; i++) {
sub_sum[i] = bigger_string[long_length-1-i] - '0';
}
if ( big > 0) {
cout << "-";
}
int str_flag = 0;
for (i--; i>=0;i--) {
if (0 == str_flag &&(0 == (sub_sum[i] - '0')))
;
else
cout << sub_sum[i];
}
}
void ds::add(string x, string y)
{
int flag = 0;
int i;
int length1 = x.length();
int length2 = y.length();
string long_string;
string short_string;
int short_length;
int long_length;
if (length1 >length2) {
long_string = x;
short_string = y;
short_length = length2;
long_length = length1;
}
else {
long_string = y;
short_string = x;
short_length = length1;
long_length = length2;
}
cout << "long is " << long_string << "length is " << long_length << ", short is " << short_string << ",short length is " << short_length<<endl;
int add_sum[MAX_LENGTH];
int sum = 0;
for (i = 0; i<short_length;i++) {
sum = long_string[long_length-1-i] - '0' + short_string[short_length-1-i] - '0' + flag;
if (sum >= 10) {
sum -= 10;
flag = 1;
} else {
flag = 0;
}
add_sum[i] = sum;
}
for (; i<long_length;i++) {
sum = long_string[long_length-1-i] - '0' + flag;
if (sum >= 10) {
sum -= 10;
flag = 1;
} else {
flag = 0;
}
add_sum[i] = sum;
}
if (flag == 1)
add_sum[i++] = 1;
for(i=i--;i>= 0;i--)
cout << add_sum[i];
}
int main()
{
ds dashu;
string x1,x2;
cout<<"please input two word:" <<endl;
cin >>x1>>x2;
int n1=x1.length();
int n2=x2.length();
if (n1==n2)
dashu.equal(x1,x2,n1,n2);
else
dashu.nequal(x1,x2,n1,n2);
dashu.add(x1, x2);
cout <<endl;
cout<<"please input two word:" <<endl;
cin >>x1>>x2;
dashu.sub(x1, x2);
cout <<endl;
return 0;
}
- 面试题大数相加相减
- 面试题: 大数相加
- 大数相加 面试题
- 面试题之自创 大数相加减
- 一道PHP面试题 大数相加 溢出的处理
- 一道PHP面试题 大数相加 溢出的处理
- 大数相加相减相乘
- 大数相乘、大数相加、大数相减Java版本
- 大数相乘、大数相加、大数相减Java版本
- 大数相乘、大数相加、大数相减Java版本
- 面试题之自创 实现两个整型大数(都是正数)的相加操作
- 剑指offer之面试题12 大数相加 实现任意两个整数的加法
- 面试题之自创 大数相除
- C语言:大数相加与大数相减.
- C语言 大数相加与大数相减
- 数相乘、大数相加、大数相减Java版本
- 大数相加,大数相除,大数相除,大数相减
- 华为机试题--- 大数相加 异常处理
- wget下载出现failed: Temporary failure in name resolution错误的解决方法
- Java非阻塞算法简介
- ORA-3136(WARNING Inbound Connection Timed Out)分析
- 总结---与ORACLE数据库交互程序性能优化篇
- dblink ora-12170
- 面试题大数相加相减
- Iphone 上使用libz库解压zip,gzip文件
- 数据库事务隔离级别
- (ORA-3136) Fatal NI connect error 12170
- android 之数据存储(IO)
- 类与类之间的关系
- Android 使用httpclient对self-signed certificate网站进行SSL连线
- SQL CUBE、ROLLUP 、COMPUTE 使用详解
- android获取源代码、编译、命令