大整数的减法
2018-03-25 16:30
211 查看
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
struct bign{
int d[1000];
int len;
bign(){
memset(d,0,sizeof(d));
len=0;
}
};
void print(bign a){
for(int i=a.len-1;i>=0;i--){
printf("%d",a.d[i]);
}
}
bign change(char str[]){
bign a;
a.len=strlen(str);
for(int i=0;i<=a.len-1;i++){
a.d[i]=str[a.len-1-i]-'0';
}
return a;
}
int compare(bign a,bign b){
//如果a>b 输出1,相等为0,小于为-1;
if(a.len>b.len) return 1;
else if(a.len<b.len) return -1;
else{
for(int i=a.len-1;i>=0;i--){
if(a.d[i]>b.d[i]) return 1;
else if(a.d[i]<b.d[i]) return -1;
}
return 0;
}
}
bign sub(bign a,bign b){
bign c;
for(int i=0;i<a.len || i<b.len;i++){
if(a.d[i]<b.d[i]){
a.d[i+1]--;
a.d[i]+=10;
}
c.d[c.len++]=a.d[i]-b.d[i];
}
while(c.len-1>=1 && c.d[c.len-1]==0) c.len--; //去除高位的0;
return c;
}
//void exchange(bign a,bign b){
// bign c; //先把a改掉,保存a;
// c.len=a.len;
// for(int i=0;i<a.len;i++){
// c.d[i]=a.d[i];
// }
// for(int i=0;i<b.len;i++){
// a.d[i]=b.d[i];
// }
// a.len=b.len;
// memset(b.d,0,sizeof(b.d));
// b.len=0;
// for(int i=0;i<c.len;i++){
// b.d[i]=c.d[i];
// }
//}
int main(int argc, char** argv) {
char str1[1000],str2[1000];
scanf("%s%s",str1,str2);
bign a=change(str1);
bign b=change(str2);
int u=compare(a,b);
if(u==-1) {
bign c; //先把a改掉,保存a;
c.len=a.len;
for(int i=0;i<a.len;i++){
c.d[i]=a.d[i];
}
for(int i=0;i<b.len;i++){
a.d[i]=b.d[i];
}
a.len=b.len;
memset(b.d,0,sizeof(b.d));
b.len=0;
for(int i=0;i<c.len;i++){
b.d[i]=c.d[i];
}
printf("-");
}
print(sub(a,b));
return 0;
}
#include <stdio.h>
#include <cstring>
using namespace std;
struct bign{
int d[1000];
int len;
bign(){
memset(d,0,sizeof(d));
len=0;
}
};
void print(bign a){
for(int i=a.len-1;i>=0;i--){
printf("%d",a.d[i]);
}
}
bign change(char str[]){
bign a;
a.len=strlen(str);
for(int i=0;i<=a.len-1;i++){
a.d[i]=str[a.len-1-i]-'0';
}
return a;
}
int compare(bign a,bign b){
//如果a>b 输出1,相等为0,小于为-1;
if(a.len>b.len) return 1;
else if(a.len<b.len) return -1;
else{
for(int i=a.len-1;i>=0;i--){
if(a.d[i]>b.d[i]) return 1;
else if(a.d[i]<b.d[i]) return -1;
}
return 0;
}
}
bign sub(bign a,bign b){
bign c;
for(int i=0;i<a.len || i<b.len;i++){
if(a.d[i]<b.d[i]){
a.d[i+1]--;
a.d[i]+=10;
}
c.d[c.len++]=a.d[i]-b.d[i];
}
while(c.len-1>=1 && c.d[c.len-1]==0) c.len--; //去除高位的0;
return c;
}
//void exchange(bign a,bign b){
// bign c; //先把a改掉,保存a;
// c.len=a.len;
// for(int i=0;i<a.len;i++){
// c.d[i]=a.d[i];
// }
// for(int i=0;i<b.len;i++){
// a.d[i]=b.d[i];
// }
// a.len=b.len;
// memset(b.d,0,sizeof(b.d));
// b.len=0;
// for(int i=0;i<c.len;i++){
// b.d[i]=c.d[i];
// }
//}
int main(int argc, char** argv) {
char str1[1000],str2[1000];
scanf("%s%s",str1,str2);
bign a=change(str1);
bign b=change(str2);
int u=compare(a,b);
if(u==-1) {
bign c; //先把a改掉,保存a;
c.len=a.len;
for(int i=0;i<a.len;i++){
c.d[i]=a.d[i];
}
for(int i=0;i<b.len;i++){
a.d[i]=b.d[i];
}
a.len=b.len;
memset(b.d,0,sizeof(b.d));
b.len=0;
for(int i=0;i<c.len;i++){
b.d[i]=c.d[i];
}
printf("-");
}
print(sub(a,b));
return 0;
}
相关文章推荐
- 高精度(大整数减法)
- 百练2736 大整数减法
- 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
- 带符号的整数做减法
- 大整数减法计算思路与算法实现
- 大整数算法[08] 有符号加法和减法
- 大型整数运算:加法, 减法, 乘法
- 大整数减法
- 实现整数的乘法,减法和除法运算。只允许使用加号
- 大整数加法减法
- 大整数运算之 大整数加法、减法、乘法
- 大整数减法 (与后来做的高精度减法不同是用了容器)
- 大整数运算(加法,减法,除法,求余,求最大公约数)
- OpenJudge 2736 大整数减法 C++
- 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
- 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
- 大整数减法
- 贪心算法-大整数乘法/加法/减法
- 大整数运算之 大整数加法、减法、乘法
- 深入理解计算机系统(2.5)---二进制整数的加、减法运算(重要)