• 大数加法、乘法


      1 #include<iostream>
      2 
      3 #include<stdio.h>
      4 
      5 #include<string.h>
      6 
      7 #define Len 3000//大数的长度
      8 
      9 using namespace std;
     10 
     11 int Input (char n[])//将大数读入的函数
     12 
     13 {
     14 
     15     char s[Len];
     16 
     17     int i,l;
     18 
     19  
     20 
     21     for(i=0; i<Len; i++) n[i]=0;
     22 
     23     if(scanf("%s",s)<1) return -1;
     24 
     25     l= strlen(s);
     26 
     27     for(i=0; i<l; i++) //将输入的大数逆置
     28 
     29         n[i]=s[l-i-1]-'0';
     30 
     31  
     32 
     33 }
     34 
     35 int Print (char n[])
     36 
     37 {
     38 
     39     int i;
     40 
     41     for(i=Len-1; i>0; i--)
     42 
     43         if(n[i]!=0) break;
     44 
     45     for(; i>=0; i--)
     46 
     47         printf("%d",n[i]);
     48 
     49     printf("
    ");
     50 
     51 }
     52 
     53  
     54 
     55 void Add (char a[],char b[],char c[])//大数加法
     56 
     57 {
     58 
     59     int i=0;
     60 
     61     for(i=0; i<Len; i++)
     62 
     63         c[i]=a[i]+b[i];
     64 
     65     for(i=0; i<Len; i++) //处理进位
     66 
     67     {
     68 
     69         if(c[i]>=10)
     70 
     71         {
     72 
     73             c[i+1]+=c[i]/10;
     74 
     75             c[i]=c[i]%10;
     76 
     77         }
     78 
     79     }
     80 
     81 }
     82 
     83 void Mul(char a[],char b[],char c[])//大数乘法
     84 
     85 {
     86 
     87     int i,j;
     88 
     89     int alen=strlen(a),blen=strlen(b);
     90 
     91     for(i=0; i<Len; i++) c[i]=0;
     92 
     93     for(i=0; i<alen; i++)
     94 
     95         for(j=0; j<blen; j++) //处理进位
     96 
     97         {
     98 
     99             c[i+j]+=a[i]*b[j];
    100 
    101             if(c[i+j]>=10)
    102 
    103             {
    104 
    105                 c[i+j+1]+=c[i+j]/10;
    106 
    107                 c[i+j]%=10;
    108 
    109             }
    110 
    111         }
    112 
    113 }
    114 
    115 int main()
    116 
    117 {
    118 
    119     char a[Len],b[Len],c[Len];
    120 
    121     Input(a);
    122 
    123     Input(b);
    124 
    125     Add(a,b,c);
    126 
    127     Print(c);
    128 
    129     Mul(a,b,c);
    130 
    131     Print(c);
    132 
    133     return 0;
    134 
    135 }

    这是最好理解的一种写法,不过好像用java写高精度会简单很多,等学了java之后再补充

    还有个博客写得很多....但不好理解 http://www.cnblogs.com/heyonggang/p/3599857.html

  • 相关阅读:
    python习题一
    华为区块链平台
    百度超级链 [Xuperchain]
    $$$Fabric v1.0 block结构与修改
    搭建 Hyperladger Fabric 基本流程
    python开发区块链【公有链】
    Asp.Net中WebServices的调用方式
    关于vs08生成解决方案慢的解决方法
    vs项目启动调试时,显示找不到文件问题
    新的公司
  • 原文地址:https://www.cnblogs.com/xurenwen/p/3890887.html
Copyright © 2020-2023  润新知