竞赛
考级
#include<bits/stdc++.h> using namespace std; int a[1005],b[1005],c[1005]; string s1,s2; int l1,l2; int main(){ cin >> s1 >> s2; l1 = s1.size(); l2 = s2.size(); for(int i = 0;i < l1;i++) a[i] = s1[l1 - i - 1] - '0'; for(int i = 0;i < l2;i++) b[i] = s2[l2 - i - 1] - '0'; int l = max(l1,l2); for(int i = 0;i < l;i++){ c[i] += a[i] + b[i]; c[i + 1] += c[i] / 10; c[i] %= 10; } if(c[l] > 0) l++; for(int i = l - 1;i >= 0;i--){ cout << c[i]; } return 0; }
烹盐器
因为数据范围会超出unsigned long long,所以要使用string来做操作 在开始之前要明白: 1.这是用string模拟加法操作,可以把它像列竖式一样,先把它反转,从个位相加,最后处理完再反转 2.string的每一位其实可以是char类型的ASCII码值为48~57的,两者相加要再减掉一个48 3.string的进位可以用bool类型来存储,到时候进位直接相加 4.要考虑到string的长度问题 为了方便观察,定义函数add(string s1,string s2)来完善程序 AC代码:
沈思邈
写的可能不是很规范
/*注释*/
礼堂钉针
#include<bits/stdc++.h> using namespace std; int a[1000005];//创建a数组 int b[1000005];//创建b数组 int c[1000005];//创建c数组 int main(){ //problem 求高精度a+b //1.储存代码 string s1,s2; cin>>s1>>s2; int lena=s1.size();//获取数字a的长度 int lenb=s2.size();//获取数字b的长度 //1.2方便储存 for(int i=0;i<lena;i++){//逆序存储b数字 a[i]=s1[lena-i-1]-'0'; //q:为什么-'0' a;因为输入的数字的字符类型数字,我们要把他转变为数字类型再求 } for(int i=0;i<lenb;i++){ b[i]=s2[lenb-i-1]-'0';//逆序存储b数字 } //2做加法 //2.1同位计算 从个位开始,逐步相加 满十进一 int len=max(lena,lenb); //首先获取较长长度的字符串长度 for(int i=0;i<len;i++){ //通过for循环一一相加 c[i]+=a[i]+b[i];//储存当前第i位相加的答案 if(c[i]>=10){ c[i]-=10;//进位 c[i+1]++; } } //3如果最高位进位了,长度要+1 if(c[len]>0)len++; //4逆序输出 for(int i=len-1;i>=0;i--)cout<<c[i]; return 0; }
小ZUZU_童瑞琪专属奴隶
来自互联网的疯子
186****8957
比斯给我磕死
余承轩
问题在于利用数组逐位相加,以及进位的问题
我想学C++
复仇者_THUNDER
模拟加法运算即可,注意进位,最后要去掉前导0. 直接上AC代码 你的点赞是我的最大更新动力 点完赞再走
吃葡萄不吐葡萄皮
逍遥骇好=&
大家应该都理解高精加的思路吧 既然理解了,那我就不做过多解释了 AC代码
唱跳坤
zhouty
a+b: a-b:
AX6t5
#include
嫌疑を避ける ~~
共52条