高精度加法

简介: 高精度加法高精度加法
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>  
#include<map>
#include<vector>
#include<queue> 
using namespace std;  
struct bign {
  int d[1000];
  int len;
  bign(){ //构造函数,初始化结构体
    memset(d,0, sizeof(d));
    len=0;
  }
};
bign change(char str[]){    //将整数转换成bign
  bign a;
  a.len=strlen(str);
  for( int i=0;i<a.len ; i++) {
    a.d[i]=str[a.len-i-1] - '0';
  }
  return a;
}
bign add(bign a,bign b){  //高精度a+b
  bign c;
  int carry=0;  //carry是进位
  for(int i=0;i<a.len || i<b.len;i++){ //以较长的为界限
    int temp=a.d[i]+b.d[i]+carry; //两个对应位与进位相加
    c.d[c.len++]=temp% 10; //个位数为该位结果
    carry=temp /10; //十位数为新的进位
  }
  if(carry !=0){ //如果最后进位不为0,则直接赋给结果的最高位
    c.d[c.len++]=carry;
  }
  return c;
}
void print(bign a){ //输出bign
  for(int i=a.len-1; i>=0;i--){
    printf("%d",a.d[i]);
  }
}
int main(){   
  char str1[1000],str2[1000];
  scanf("%s%s",str1,str2);
  bign a=change(str1);
  bign b=change(str2);
  print(add(a,b));
  system("pause");
  return 0;
}
相关文章
|
10月前
|
Java C++
poj 1503 高精度加法
把输入的数加起来,输入0表示结束。 先看我Java代码,用BigINteger类很多东西都不需要考虑,比如前导0什么的,很方便。不过java效率低点,平均用时600ms,C/C++可以0ms过。
30 1
|
9月前
|
C++
筛质数、分解质因数和快速幂的应用
筛质数、分解质因数和快速幂的应用
52 0
|
5天前
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
|
3月前
|
人工智能 Java BI
快速幂讲解
快速幂讲解
35 0
|
11月前
|
Java C++
高精度加法 A+B 问题
高精度加法 A+B 问题
|
物联网
快速幂
快速幂
72 0
|
存储
【4. 高精度加法】
高精度加法 >## 思路: >- 大整数存储(用数组来存储,数组第0位,存低位,数组最后一位存高位),因为在进行加法运算时,通常会有进位,而在数组的最后一位,进位比较容易,而如果在数组开头进位的话,需要把整个数组移动一位。 >- 数组的每一位存一位数字
90 0
【4. 高精度加法】