刷题日记——由浅入深的大数加法(高精度加法)

例题

在这里插入图片描述

代码

#include <cstdio>int main(){long long a,b;scanf("%lld %lld",&a,&b);printf("%lld\n",a+b);}

例题——高精度加法

编程计算:1234567891234567891212121+1231212121212121212121222222111112121=?

分析

加法步骤

1. 将输入的两行数字当作字符串
2. 初始化三个数组,要求数组的每个元素都是0,以便存储字符串的每一位值
3. 将两个字符串的每一位都转成数字,然后倒序存入数组中(个位对齐)
4. 根据最长字符的长度确定计算次数:两个数组从0到最长数组的长度进行相同序号元素的加法,和存入第三个数组的对应序号中
5. 对第三个数组进行调整,如果值超过或等于10,那么就让下一序号的元素加上十位数字,当前序号取模10的值
6. 倒序输出调整后的数组,注意,如果两个数产生进位就要让倒序输出的开始位置后移一位

遇到的深坑

这题由于对C++初始化内存分配不理解导致很长时间没有做出来,经过学习明白了C++的初始化原理:

  • main函数中定义的临时变量存储在内存的栈中,不赋初值时默认为脏数
  • new声明的变量存储在内存的堆中,不赋初值时默认为脏数
  • 声明的全局变量存储在内存的全局/静态存储区中,不赋初值时默认为0
C++初始化总结:

在C++中,不同存储位置的变量在初始化时会有不同的行为:

  1. 堆中的变量(使用new操作符动态分配的):

    • 对于基本数据类型(如int, char, float, double等),如果没有显式初始化,它们的内容是未定义的。这意味着它们可能包含任何值,这取决于分配内存时的状态。
    • 对于类类型的对象,如果没有显式调用构造函数,编译器会尝试调用默认构造函数(如果存在的话)。如果没有定义默认构造函数,编译器会报错。
  2. 全局/静态存储区的变量

    • 对于基本数据类型,全局变量和静态变量在程序开始执行之前会被自动初始化为0(对于数值类型)或者空字符(对于char类型)。
    • 对于类类型的全局变量和静态变量,如果提供了默认构造函数,该构造函数会被用来初始化变量。如果没有提供默认构造函数且没有显式初始化,编译器会报错。
  3. 栈中的变量(局部变量):

    • 对于基本数据类型,局部变量如果没有显式初始化,则它们的值是未定义的。这意味着它们可能包含任何值,这取决于函数被调用时栈的状态。
    • 对于类类型的局部变量,如果没有显式调用构造函数且没有提供默认构造函数,编译器会报错。如果提供了默认构造函数,那么对象会使用默认构造函数进行初始化。

总结:

  • 堆中的变量和栈中的基本数据类型变量如果没有显式初始化,则它们的值是未定义的。
  • 全局/静态存储区的变量无论基本数据类型还是类类型,都会被自动初始化为默认值(对于基本数据类型是0或空字符,对于类类型是调用默认构造函数)。
  • 类类型的变量(无论在哪个存储区)如果没有定义默认构造函数且没有显式初始化,编译器会报错。

为了编写健壮且可维护的代码,建议总是显式初始化你的变量,无论是全局的、静态的、堆上的还是栈上的。这可以避免潜在的运行时错误和难以调试的问题。

高精度加法代码

#include <cstdio>
#include <map>
#include <string>
#include <string.h>
#include <cmath>
#include <vector>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <limits.h>
#include <iostream>
using namespace std;int main(){string s1,s2;char str1[200],str2[200];int num_1[200]={0};int num_2[200]={0};int num_3[200]={0};//fgets(str1,200,stdin);//fgets(str2,200,stdin);scanf("%s ",str1);scanf("%s",str2);s1 = str1;s2 = str2;//getline(cin,s1);//getline(cin,s2);for(int i=0;i<s1.size();i++){num_1[s1.size()-i-1]=str1[i]-'0';}for(int i=0;i<s2.size();i++){num_2[s2.size()-i-1]=str2[i]-'0';}int len = max(s1.size(),s2.size());for(int i=0;i<len;i++){num_3[i] = num_1[i]+num_2[i] ;}for(int i=0;i<len;i++){if(num_3[i]>=10){num_3[i+1] = num_3[i+1] + num_3[i]/10;num_3[i] = num_3[i]%10;}}if(num_3[len]!=0){len++;}for(int i =len-1;i>=0;i--){printf("%d",num_3[i]);}printf("\n");return 0;
}

例题——计算Sn(北京大学机试)

在这里插入图片描述

分析

用递归

代码

#include <cstdio>
#include <map>
#include <string>
#include <string.h>
#include <cmath>
#include <vector>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <limits.h>
#include <iostream>
using namespace std;unsigned long long caculate(int a,int n){if(n==1){return a;}return a+10*caculate(a,n-1);
}int main(){int a,n;scanf("%d%d",&a,&n);unsigned long long sum=0;for(int i=1;i<=n;i++){sum+=caculate(a,i);}printf("%lld",sum);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/595882.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工程师必备:PW1558 12V/20V过流限压保护芯片,短路无忧,运行更稳定

在电力电子领域&#xff0c;寻找一款能够提供全面保护且性能卓越的电源开关至关重要。PW1558正是这样一款产品&#xff0c;它凭借出色的性能和广泛的应用领域&#xff0c;赢得了业界的广泛认可。下面&#xff0c;我们将从描述、特点和应用三个方面&#xff0c;详细解读PW1558的…

Ideal的使用技巧

一、springcloud项目如何将多个服务放到services中一起启动 1、打开ideal&#xff0c;再view -> Tool Windows -> services 2、在services界面 找到 run configuration type -> springboot即可 二、配置临时的启动参数 1、在edit configurations中 2、选择相应的服务…

C. MEX Game 1

本题如果我们去模拟这个算法的话会很麻烦&#xff0c;也会TLE&#xff0c;首先我们想 1&#xff0c;对于alice来说&#xff0c;先取小的&#xff0c;对于bob来说先删除alic想取的下一个小的 2&#xff0c;那如果这个数多于两个&#xff0c;那也就是说&#xff0c;alice肯定能…

【详细讲解0基础如何进入IT行业】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

UE4_如果快速做出毛玻璃效果_假景深

UE4_如果快速做出毛玻璃效果_假景深 2022-08-20 15:02 一个SpiralBlur-SceneTexture材质节点完成效果&#xff0c;启用半透明材质通过修改BlurAmount数值大小调整效果spiralBlur-SceneTexture custom节点&#xff0c;HLSL语言float3 CurColor 0;float2 BaseUV MaterialFloa…

树状数组相关题目

题目一 方法一 归并分治 代码&#xff1a; # include <stdio.h>int arr[100]; int help[100];int n;//归并分治 // 1.统计i、j来自 l~r 范围的情况下&#xff0c;逆序对数量 // 2.统计完成后&#xff0c;让arr[l...r]变成有序的 int f(int l, int r) {if (l r)return…

Mybatis 之 useGeneratedKeys

数据库中主键基本都设置为自增&#xff0c;当我们要插入一条数据想要获取这条数据的 Id 时&#xff0c;就可使用 Mybatis 中的 useGeneratedKeys 属性。 背景 这里以 苍穹外卖 中的 新增菜品 功能为例&#xff0c;有 菜品表(dish table)和 口味表(dish_flavor table)&#xf…

C#,简单,精巧,实用的文件夹时间整理工具FolderTime

点击下载本文软件&#xff08;5积分&#xff09;&#xff1a; https://download.csdn.net/download/beijinghorn/89071073https://download.csdn.net/download/beijinghorn/89071073 百度网盘&#xff08;不需积分&#xff09;&#xff1a; https://pan.baidu.com/s/1FwCsSz…

鸿蒙OS开发实例:【组件化模式】

组件化一直是移动端比较流行的开发方式&#xff0c;有着编译运行快&#xff0c;业务逻辑分明&#xff0c;任务划分清晰等优点&#xff0c;针对Android端的组件化&#xff1b;与Android端的组件化相比&#xff0c;HarmonyOS的组件化可以说实现起来就颇费一番周折&#xff0c;因为…

5G随身wifi真实测评!飞猫5g随身wifi怎么样?飞猫5GVS格行5G随身wifi哪款网速快?5G随身wifi推荐品牌第一名!

飞猫5G随身wifi&#xff1a; 产品外观&#xff1a;黑色大气外观&#xff0c;净重175g&#xff0c;屏幕有信号和指示灯。 产品性能&#xff1a;采用展锐芯片。6根LDS天线&#xff0c;网速100-200mbps&#xff0c;网络延迟10-20ms&#xff0c;2.4G/5G双频可选&#xff0c;超稳定…

第十三届蓝桥杯C++A组 - B/D/E

文章目录 前言一、灭鼠先锋1.题目描述2.算法 二、选数异或1.题目描述2.算法 三、爬树的甲壳虫1.问题描述2.算法 前言 题目考点灭鼠先锋bfs博弈论MEX运算SG函数选数异或二分线段树爬树的甲壳虫快速幂逆元扩展欧几里得裴蜀定理dp 一、灭鼠先锋 1.题目描述 2.算法 我们先要确定…

[蓝桥杯 2017 国 C] 合根植物

[蓝桥杯 2017 国 C] 合根植物 题目描述 w 星球的一个种植园&#xff0c;被分成 m n m \times n mn 个小格子&#xff08;东西方向 m m m 行&#xff0c;南北方向 n n n 列&#xff09;。每个格子里种了一株合根植物。 这种植物有个特点&#xff0c;它的根可能会沿着南北…