zoukankan      html  css  js  c++  java
  • 大数加减运算

      1 #include<iostream>
      2 #include<string>
      3 
      4 using namespace std;
      5 
      6 void BDplus(string str1, string str2)
      7 {
      8     int len1 = str1.length();
      9     int len2 = str2.length();
     10     char *value = NULL;
     11     if (len1 >= len2)
     12     {
     13         //value= (char*)malloc(len1*sizeof(char));
     14         value = new char[len1*sizeof(char)+1];
     15     }
     16     else if (len1 <= len2)
     17     {
     18         //value = (char*)malloc(len2*sizeof(char));
     19         value = new char[len2*sizeof(char)+1];
     20     }
     21     int flag = 0;
     22 
     23     int i = 0;
     24     while (len1 > 0 && len2 > 0)
     25     {
     26         if (len1 <= 0 && len2 > 0)
     27         {
     28             len1 = 1;
     29             str1[0] = '0';
     30         }
     31         else if (len1 > 0 && len2 <= 0)
     32         {
     33             len2 = 1;
     34             str2[0] = '0';
     35         }
     36         int temp;
     37         temp = (int)(str1[len1 - 1] - '0') + (int)(str2[len2 - 1] - '0'); 
     38         value[i++] = (char)(temp % 10 + flag + (int)'0');
     39         if (temp / 10 == 1)
     40         {
     41             flag = 1;
     42         }
     43         else
     44         {
     45             flag = 0;
     46         }
     47         len1--;
     48         len2--;
     49     }
     50     if (flag == 1)
     51     {
     52         value[i++] = '1';
     53         value[i] = '';
     54     }
     55     else
     56     {
     57         value[i] = '';
     58     }
     59     i--;
     60     for(; i >= 0; i--)
     61     {
     62         cout << value[i];
     63     }
     64 }
     65 void BDminus(string str1, string str2)
     66 {
     67     int len1, len2;
     68     len1 = str1.length();
     69     len2 = str2.length();
     70     int flag = 0, i = 0;
     71     int Case = 0;
     72     char *value = NULL;
     73 
     74     /*因为 string类重载了与string相比较的所有函数,包括<,>,==,>=,<=,!=*/
     75 
     76     //if (len1 == len2)//两字符串长度相等
     77     //{
     78     //    int j = 0;
     79     //    while ((j < len1) && (str1[j] == str2[j]))
     80     //    {
     81     //        j++;
     82     //    }
     83     //    if (j >= len1)//字符串1等于字符串2
     84     //    {
     85     //        Case = 1;
     86     //    }
     87     //    else        //字符串1不等于字符串2
     88     //    {
     89     //        if (str1[j]>str2[j])//字符串1大于字符串2
     90     //        {
     91     //            Case = 1;
     92     //        }
     93     //        else                //字符串1小于字符串2
     94     //        {
     95     //            Case = 2;
     96     //        }
     97     //    }
     98 
     99     //}
    100     //else if (len1 > len2)//字符串1长度大于字符串2
    101     //{
    102     //    Case = 1;
    103     //}
    104     //else                //字符串1长度小于字符串2
    105     //{
    106     //    Case = 2;
    107     //}
    108 
    109     if(str1>=str2)// (Case==1)//情况一 大减小
    110     {
    111         value = (char *)malloc(len1*sizeof(char));
    112         int temp;
    113         while (len1 > 0 && len2 > 0)
    114         {
    115             if (flag == 1)//借位处理
    116             {
    117                 if (str1[len1 - 1] == '0')
    118                 {
    119                     str1[len1 - 1] = '9';
    120                     flag = 1;
    121                 }
    122                 else if (str1[len1 - 1] != '0')
    123                 {
    124                     str1[len1 - 1] = str1[len1 - 1] - 1;
    125                     flag = 0;
    126                 }
    127             }
    128             if (str1[len1 - 1] >= str2[len2 - 1])
    129             {
    130                 temp = (str1[len1 - 1] - '0') - (str2[len2 - 1] - '0');
    131                 flag = 0;
    132             }
    133             else
    134             {
    135                 temp = (str1[len1 - 1] - '0') + 10 - (str2[len2 - 1] - '0');
    136                 flag = 1;
    137             }
    138             value[i++] = (char)(temp+(int)'0');
    139             len1--;
    140             len2--;
    141             if (len1 > 0 && len2 <= 0)
    142             {
    143                 len2 = 1;
    144                 str2[0] = '0';
    145             }
    146         }
    147     }
    148     else if (str1<str2)//(Case==2)//情况二 小减大
    149     {
    150         value = (char *)malloc(len2*sizeof(char));
    151         int temp;
    152         while (len1 > 0 && len2 > 0)
    153         {
    154             if (flag == 1)//借位处理
    155             {
    156                 if (str2[len2 - 1] == '0')
    157                 {
    158                     str2[len2 - 1] = '9';
    159                     flag = 1;
    160                 }
    161                 else if (str2[len2 - 1] != '0')
    162                 {
    163                     str2[len2 - 1] = str2[len2 - 1] - 1;
    164                     flag = 0;
    165                 }
    166             }
    167             if (str2[len2 - 1] >= str1[len1 - 1])
    168             {
    169                 temp = str2[len2 - 1] -str1[len1 - 1];
    170                 flag = 0;
    171             }
    172             else
    173             {
    174                 temp = str2[len2 - 1] + 10 - str1[len1 - 1];
    175                 flag = 1;
    176             }
    177             value[i++] = (char)(temp + (int)'0');
    178             len1--;
    179             len2--;
    180             if (len1 <= 0 && len2 > 0)
    181             {
    182                 len1 = 1;
    183                 str1[0] = '0';
    184             }
    185         }
    186         cout << "-";
    187     }
    188 
    189     value[i] = '';
    190     i--;
    191     while (i >= 0 && value[i] == '0')
    192     {
    193         i--;
    194     }
    195     if (i < 0)
    196     {
    197         cout << 0;
    198     }
    199     else
    200     {
    201         for(; i >= 0; i--)
    202         {
    203             cout << value[i];
    204         }
    205     }
    206 }
    207 int main(void)
    208 {
    209     string str1,str2,result;
    210     cin >> str1>>str2;
    211     BDplus(str1, str2);
    212     BDminus(str1, str2);
    213 
    214     return 0;
    215 }
  • 相关阅读:
    问题001:Java软件,属于系统软件还是应用软件呢?
    Apache.Tomcat 调用Servlet原理之Class类的反射机制,用orc类解释
    CharSquence 接口的作用,多态以增强String
    eclipse环境Dynamic web module version 3.1版本的进步,简化Dynamic web object 中Servlet类的配置,不用web.xml配置<Servlet>
    tomcat.apache startup.bat闪退两种解决方法
    c++谭浩强教材教学练习例题1.2 求两数之和 为什么sum=a+b;sum的值为65538
    JSON格式自动解析遇到的调用方法问题.fromJson() ..readValue()
    shell command to replace UltraEdit
    根据内容最后一位进行排序
    利用left join 筛选B表中不包含A表记录
  • 原文地址:https://www.cnblogs.com/hhboboy/p/5519823.html
Copyright © 2011-2022 走看看