算法笔记-----大整数相+------数组---效率

Posted alm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法笔记-----大整数相+------数组---效率相关的知识,希望对你有一定的参考价值。

  1 //
  2 // Created by alim on 2017/12/23.
  3 //
  4 
  5 
  6 #include <stdlib.h>
  7 #include <cstring>
  8 #include <iostream>
  9 using namespace std;
 10 
 11 #define M 100
 12 
 13 char sa[1000];
 14 char sb[1000];
 15 
 16 typedef struct _Node{
 17     int s[M];//数字
 18     int l;//数字长度
 19 }Node,*pNode;
 20 
 21 
 22 void dzs_add(pNode pa,pNode pb,pNode result){
 23     int i, cc;
 24     pNode temp;
 25 
 26     if (pa->l < pb->l) {
 27         temp = pb;
 28         pb = pa;
 29         pa = temp;
 30     }
 31 
 32     for (int j = 0; j < pa->l; ++j) {
 33         result->s[j] = pa->s[j];
 34     }
 35     result->l = pa->l;
 36 
 37     cc = 0;
 38     for (i = 0; i < pb->l; ++i) {
 39         result->s[i] = (pa->s[i] + pb->s[i] + cc) % 10;
 40         cc = (pa->s[i] + pb->s[i]) / 10;
 41     }
 42     if (cc != 0) {
 43         result->s[i] = result->s[i]+cc;
 44     }
 45     if (i >= result->l) {
 46         result->l = i+1;
 47     }
 48 
 49     return;
 50 }
 51 
 52 void dzs_jian(pNode pa,pNode pb,pNode result){
 53     int i, cc;
 54     pNode temp;
 55 
 56     if (pa->l < pb->l) {
 57         temp = pb;
 58         pb = pa;
 59         pa = temp;
 60     }
 61     for (int j = 0; j < pa->l; ++j) {
 62         result->s[j] = pa->s[j];
 63     }
 64     result->l = pa->l;
 65     cc = 0;
 66     for (i = 0; i < pb->l; ++i) {
 67         if (pa->s[i] >= pb->s[i]) {
 68             result->s[i] = pa->s[i] - pb->s[i];
 69         } else {
 70             result->s[i + 1] -= 1;
 71             result->s[i] = pa->s[i] + 10 - pb->s[i];
 72         }
 73     }
 74     if (i >= result->l) {
 75         result->l = i+1;
 76     }
 77 }
 78 int main() {
 79     Node ans,a,b;
 80     cout << "请输入大整数 a:"<<endl;
 81     cin >> sa;
 82     cout << "请输入大整数 b:" << endl;
 83     cin >> sb;
 84     a.l = strlen(sa);//以字符串进行处理,计算长度
 85     b.l = strlen(sb);
 86 
 87     //倒向存储
 88     int z=0,i;
 89     for (int i = a.l-1; i >= 0; i--) {
 90         a.s[z++] = sa[i]-0;
 91     }
 92 
 93     z=0;
 94     for (int i = b.l-1; i >= 0; i--) {
 95         b.s[z++] = sb[i] - 0;
 96     }
 97 //    dzs_add(&a, &b, &ans);
 98     dzs_jian(&a, &b, &ans);
 99     cout << "最终结果为:\n";
100     for (i = ans.l-1; i >= 0; i--) {
101         cout<<ans.s[i];
102     }
103 
104     cout << endl;
105     return 0;
106 }

 

以上是关于算法笔记-----大整数相+------数组---效率的主要内容,如果未能解决你的问题,请参考以下文章

有一个整数数组,数组长度为10万,整数的范围位于3到900之间,请用Java实现时间复杂度尽可能低的排序算法(假设内存空间足够大)

算法笔记_037:寻找和为定值的两个数(Java)

题目:大整数乘法除法,楼梯走法,数组中不同数字,超过一半数字(好)

什么是疯狂大整数除法的最快算法?

初涉算法——大整数类

大整数除法 - Knuth 算法 D