leehom


私信TA

用户名:leehom

访问量:1032

签 名:

等  级
排  名 39999
经  验 335
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校 深圳大学
专  业

  自我简介:

解题思路:
        通过题目描述我们可以知道,用普通的加法是解决不了的,即使采用double也是不可取的。这题是属于高精度加法,高精度常用的算法有加法、减法、乘法、除法。

        例如,有两个字符串,str1="123456789",str2="123456",用整型数组num1字符串str1的数字,用num2存储读字符串str2。如下所示。

pic2.png

        然后将数组num2的元素加到数组num1,如下图所示。

pic1.png

        遍历数组num1,如果num1中的某个元素num[i]大于10,就进入如下操作,num[i]减10,num[i+1]加1。

pic3.png

    最后反向输出数组num1即可。

参考代码:

#include <iostream>
#include <string>
#include <cstring>
#define maxn 105
typedef unsigned long ul;
using namespace std;

int num1[maxn],num2[maxn];

ul add(string str1,string str2){
    ul size1 = str1.size(),size2 = str2.size();

    for(ul i = 1; i <= size1; i ++){
        num1[i] = str1[size1 - i] - 48;
    }
    for(ul i = 1; i <= size2; i ++){
        num2[i] = str2[size2 - i] - 48;
    }

    for(int i = 1; i <= size1; i ++){
        num1[i] += num2[i];
    }

    for(int i = 1; i <= size1; i ++){
        if(num1[i] >= 10){
            num1[i+1] += 1;
            num1[i] -= 10;
        }
    }
    if(num1[size1+1] > 0){
        size1 ++ ;
    }
    return size1;

}

int main(){
    string str1,str2;
    cin >> str1;
    cin >> str2;
    ul len;
    memset(num1,0,sizeof(num1));
    memset(num2,0,sizeof(num2));
    if(str1.size() >= str2.size()){
        len = add(str1,str2);
    }else{
        len = add(str2,str1);
    }
    for(int i = 1; i <= len; i ++){
        cout << num1[len - i + 1];
    }
    cout << endl;

}


 

0.0分

4 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

这个处理长度大小和进位的方法太秀了,
2022-10-09 18:59:51
  • «
  • 1
  • »