大整数减法
2012-06-04 21:11
190 查看
自己花了几个小时写的
最后边界虽然是对的但是感觉还是很麻烦,等在想想 或找到别人更好的再说吧
#include <iostream>
#include <cstring>
using namespace std;
//字符串反转
void Reverse(char *str)
{
char* left = str;
char temp;
str = str+strlen(str)-1;
while(left < str)
{
temp = *left;
*left++ = *str;
*str-- = temp;
}
}
void Bigsub(char* a,char* b,char* res)
{
int lena = strlen(a),
lenb = strlen(b);
int max = lena >= lenb ? lena : lenb;
int min = lenb;
char *str = new char[max+1];
// 串组a内总是存着二者较长的串组
if(lena < lenb)
{
min = lena;
strcpy(str,a);
strcpy(a,b);
strcpy(b,str);
}
//cout<<a<<endl;
//cout<<b<<endl;
//开始计算
int x = 0,i,sub;
for(i = 0; i < max; i++)
{
if(i < min)
sub = (a[i] - '0') - (b[i] - '0') - x;
else
sub = (a[i] - '0') - x;
//处理a[i] - b[i] < 0的情况,要在前一位接1,
if(sub < 0)
{
res[i] = 10 + sub + '0';
x = 1;
//a[i+1] = a[i+1] - '0' - 1;
}
else
{
res[i] = sub + '0';
x = 0;
}
}
if(res[i-1] == '0')
res[i-1] = 0;
else
res[i] = 0;
}
int main()
{
char a[200],b[200],res[202];
cin>>a>>b;
Reverse(a);
Reverse(b);
Bigsub(a,b,res);
Reverse(res);
cout<<res<<endl;
return 0;
}
最后边界虽然是对的但是感觉还是很麻烦,等在想想 或找到别人更好的再说吧
#include <iostream>
#include <cstring>
using namespace std;
//字符串反转
void Reverse(char *str)
{
char* left = str;
char temp;
str = str+strlen(str)-1;
while(left < str)
{
temp = *left;
*left++ = *str;
*str-- = temp;
}
}
void Bigsub(char* a,char* b,char* res)
{
int lena = strlen(a),
lenb = strlen(b);
int max = lena >= lenb ? lena : lenb;
int min = lenb;
char *str = new char[max+1];
// 串组a内总是存着二者较长的串组
if(lena < lenb)
{
min = lena;
strcpy(str,a);
strcpy(a,b);
strcpy(b,str);
}
//cout<<a<<endl;
//cout<<b<<endl;
//开始计算
int x = 0,i,sub;
for(i = 0; i < max; i++)
{
if(i < min)
sub = (a[i] - '0') - (b[i] - '0') - x;
else
sub = (a[i] - '0') - x;
//处理a[i] - b[i] < 0的情况,要在前一位接1,
if(sub < 0)
{
res[i] = 10 + sub + '0';
x = 1;
//a[i+1] = a[i+1] - '0' - 1;
}
else
{
res[i] = sub + '0';
x = 0;
}
}
if(res[i-1] == '0')
res[i-1] = 0;
else
res[i] = 0;
}
int main()
{
char a[200],b[200],res[202];
cin>>a>>b;
Reverse(a);
Reverse(b);
Bigsub(a,b,res);
Reverse(res);
cout<<res<<endl;
return 0;
}
相关文章推荐
- 贪心算法-大整数乘法/加法/减法
- 深入理解计算机系统(2.5)---二进制整数的加、减法运算(重要)
- 2736 大整数减法
- 长整数相加运算(内含减法)。。= =
- noi-1738-大整数减法
- 大整数加法减法
- 大整数运算之 大整数加法、减法、乘法
- 高精度(大整数减法)
- 百练2736 大整数减法
- 9.7数学与概率(二)——实现整数的乘法、减法和除法运算,只允许使用加号
- 大整数减法
- 大整数运算之 大整数加法、减法、乘法
- 大整数减法 (与后来做的高精度减法不同是用了容器)
- 1-6-11:大整数减法
- OpenJudge 2736 大整数减法 C++
- 大型整数运算:加法, 减法, 乘法
- 大整数减法
- Ac日记——大整数减法 openjudge 1.6 11
- 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
- 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。