zoukankan      html  css  js  c++  java
  • 大整数相加

    #include <iostream>
    #include <string>
    /*project:两个大整数相加 
    **@author:浅滩 
    **data:2019.05.15 
    */
    
    using namespace std;
    void add(const string &,const string &);
    int main()
    {
    string str1,str2; 
    cin>>str1>>str2;
    if(str1.size()>=str2.size())//我不知道为什么这莫该就ac通过了,一脸懵逼 
    add(str1,str2);
    else add(str2,str1);
    }
    
    void add(const string &str1,const string &str2)
    {
    
    int *num1=new int [str1.size()];
    int *num2=new int [str2.size()];
    int result_size;
    //const int len=(str1.size()>str2.size()? str1.size():str2.size());
    int result[10000];
    fill(result,(result+10000),0);//初始化结果数组
    
    for(int i=0;i<str1.size();i++)//字符串到整数数组的转换 
    num1[i]=str1[i]-'0'; 
    for(int i=0;i<str2.size();i++)
    num2[i]=str2[i]-'0';
    int s1=str1.size()-1,s2=str2.size()-1,k=(str1.size()>str2.size()? str1.size():str2.size())-1;
    cout<<k+1;
    while(s1>=0&&s2>=0)
    {
    result[k]=num1[s1]+num2[s2];
    k--;s1--;s2--;
    }
    
    while(s1>=0)
    {
    result[k]+=num1[s1];
    k--;s1--;
    }
    while(s2>=0)
    {
    result[k]+=num1[s2];
    k--;s2--;
    }
    // cout<<k+1;return;
    result_size=(str1.size()>str2.size()? str1.size():str2.size())-1;
    for(int i=result_size;i>k+1;i--)//从后向前进位 
    {
    result[i-1]+=result[i]/10;
    result[i]=result[i]%10; 
    }
    //cout<<result_size<<endl;
    for(int i=k+1;i<=k+1+result_size;i++)
    cout<<result[i]; 
    }
    //之前的bug是下面这组测试数据 
    //456 98949444184
    // 9683087243640
    //98949444184 456结果不相同

     上面代码是之前牛客网上的题解

     思路都一样,用StringBuffer或者StringBuilder比String快很多

    class Solution {
        public String addStrings(String num1, String num2) {
            int carry = 0;
            int num1Len = num1.length(),num2Len = num2.length();
            StringBuffer res =  new StringBuffer("");
            for(int i=num1Len-1,j=num2Len-1;i>=0||j>=0;i--,j--){
                int x = i >= 0? num1.charAt(i)-'0':0;
                int y = j >= 0? num2.charAt(j)-'0':0;
                int sum = x + y + carry;
                res.append(sum % 10); 
                carry = sum / 10;
            }
            if(carry > 0) res.append(1);
            return res.reverse().toString();
        }
    }

    不一样的烟火
  • 相关阅读:
    常用的正则表达式
    Spring
    Hibernate-04
    Hibernate-03
    Hibernate-02
    Hibernate-01
    装饰器(python)
    软件工程之小组选题报告
    小组项目之需求分析与原型设计
    关于group_concat函数拼接字符超长的问题
  • 原文地址:https://www.cnblogs.com/cstdio1/p/10891634.html
Copyright © 2011-2022 走看看