大整数的加法

数据结构设计

Struct BigIngter{

int digit[1000];

int size;

Void init() //清零,全为0

Void change(char str[]) {

// 输入的数倒放在digit[]中

}

BigIngter operator+ (cosnt BigIngter &A) const{

//重载 + 注意进位

//要判断最后一个进位是否大于0 digit[key++] = cry;

}

关键是要模拟加法的计算将数倒序放在数组中可将最后是否进位模拟出来,也可正放数组,不过要在digit[0]留出一位,来填最后的进位

#include <stdio.h>
#include <string.h>
using namespace std;
struct BigIngter{
  int digit[1000];
  int size;
  void init(){
      for(int i = 0; i < size; i++){
          
          digit[i] = 0;
      }
}
   void change(char str[])
   {
       init();
        int l = strlen(str);
        size = l;
        int lg = 0;
        for(int i = size-1; i >= 0; i--){
            
               digit[lg] = str[i] - ‘0‘;
               lg++;
               printf("%d  ",digit[i]);
        }
       
       
       
       
   }
      
      BigIngter operator+ (const BigIngter &A) const{
        BigIngter tmp;
        tmp.init();
      
        int key,cry = 0;
        if(size >= A.size) key = size;
        else key = A.size;
        for(int i = 0; i < key; i++){
       int t = digit[i] + A.digit[i] + cry;
            tmp.digit[i] = t % 10;
            cry = t / 10;
     }
        if(cry > 0) tmp.digit[key++] = cry;
       tmp.size = key;
        return tmp;
  }
  void show(){
      for(int i = size -1; i >= 0; i--){
          printf("%d",digit[i]);
      
      }
          printf("\n");
  }
    
}a,b,c;
int main(){
  char str1[1000];
  char str2[1000];
  scanf("%s",str1);
  scanf("%s",str2);
  a.init();
  b.init();
  c.init();
  a.change(str1);
  b.change(str2);
  a.show();
  b.show();
  c = a + b;
  c.show();
 
}

时间: 2024-11-05 22:48:12

大整数的加法的相关文章

大整数加法计算

普通数字的运算,我们可以直接运用已有类型int, long, long long等等计算,但要是数字非常大,这些类型是远远装不下的. 故而很多情况下需要我们自己来设置大整数运算,本篇记录的是大整数的加法运算的方法. 对于加法运算,第一个方法是模拟手算.先来看看手算的步骤: 手算的时候,我们会先把个位相加,有进位则向前进一位,然后计算下一位,重复此步骤.若两个数的位数不同,计算时我们会把位数长的放在上面,位数短的放在下面.短位的数加完后,长位的数则和0相加. 实现加法计算的思路很简单,首先把数字都

大整数的乘法运算

思想:每次取第二个数的最高位进行一次乘法,把结果乘以10和下一次结果相加,题目来源:leetcode class Solution { public: //一个整数乘以一个个位数 string multOneBit(string num,int data) { int i = num.size() - 1,carry = 0; string res; for(;i >= 0;--i) { int value = (num[i] - '0') * data + carry; carry = val

模板 高精度大整数

#include<bits/stdc++.h> #define clr(x,y) memset((x),(y),sizeof(x)) using namespace std; typedef long long LL; const int MaxL=400; //大数长度 //大整数 //减法只能大减小 struct bign { int len, s[MaxL]; //构造函数 bign () { memset(s, 0, sizeof(s)); len = 1; } bign (int n

字符串+数组模拟大整数乘法

C/C++中存在精度问题,很难做到大整数的加法和乘法操作,这里给出大整数的模拟乘法运算. 模拟原理: 模拟每一个位的值进行相乘,并使其加到对应的位置上,最后保证每一位的数都小于10,即从尾到头扫描一遍进位即可. 主要代码: k=(mx-i)+(mbx-j);//相乘后的位置 c[k-1]+=sum%10; c[k]+=sum/10; for(t=1;t<=k;++t){//保证每一位上的数都小于10 if(c[t]>=10){ //cout<<c[t]<<"

大整数的加减乘除C++实现

大整数的乘法由于用分治法理解起来有点困难,就采用人的计算方法实现,大整数为string 类型,结果也为string类型. 大整数的除法采用先乘后减的方法,例如: 665/20 首先20*10=200:然后665去减200,通过循环计入减了3次,则结果记入3*10=30:然后20*1=20,上次减了之后还剩65,65-20,又减了3次,所以结果记入30+3*1=33:最后还剩5,比20小,则余数为5. 大整数的加法减法和人工打草稿过程类似,不做详细分析.实现代码仅供参考: 1 #include<i

大整数的存储与加减乘除四则运算

当需要计算的整数或计算结果可能会超出long long 所能表示的范围时,应该用大整数来存储和计算(Java里面有BigInteger来存储大整数,这里讨论的是C++语言). 大整数的存储形式是下面这个结构体(包含了构造函数): // 大整数结构体 struct bign{ int d[1000]; int len; bign(){ memset(d, 0, sizeof(d)); len = 0; } }; 首先以字符串的形式读去数据,然后将字符串逐个逆序字符存入d[]数组(可以采用用reve

A——大整数加法(HDU1002)

题目: I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B. InputThe first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line co

日常记录(c语言)--字符串实现大整数加法

运行环境:CentOs 64位--vim 最近在看<剑指offer>这本书,看了前面的关于面试的能力,顿时觉得自己的编程能力差得好远. 可能我对鲁棒的代码理解还不深,我觉得鲁棒应该就是代码可以应对各种不同的输入,都能有相应的处理,并给出相应的输出. 下面是我看了之后对之前做过的大整数加法做了一些完善,之前的只能实现对纯数字字符进行求和,甚至连对空指针的处理都没有,好惭愧.我会用注释来记录自己对此算法的理解. 1 #include <stdio.h> 2 #include <s

AC日记——大整数加法 openjudge 1.6 10

10:大整数加法 总时间限制:  1000ms 内存限制:  65536kB 描述 求两个不超过200位的非负整数的和. 输入 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0. 输出 一行,即相加后的结果.结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342. 样例输入 22222222222222222222 33333333333333333333 样例输出 55555555555555555555 来源 程序设计实习2007 思路: 模拟: 来,上代码: