高精度加法
题目描述
输入两个大整数a,b,输出他们的和。(1<=a,b<=10的100次方)
输入
输入两个大整数a和b。
输出
输入a加b的和。
样例输入
43434343445435343 32435647668754353
样例输出
75869991114189696
程序+注释
#include <bits/stdc++.h>
using namespace std;
char al[100],bl[100];
int a[100],b[100],c[100];
int main()
{
scanf("%s",al);//不能用gets
scanf("%s",bl);//因为这两个数之间只有一个空格
int lena,lenb,lenc,x = 0;//x代表进位
lena = strlen(al);//lena是al数组的长度
lenb = strlen(bl);//lenb是bl数组的长度
for (int i = 0;i <= lena - 1;i ++)//把这个数字反着存储 al里的123就是a里面的321
a[lena - i] = al[i] - '0';
for (int i = 0;i <= lenb - 1;i ++)//这个也是
b[lenb - i] = bl[i] - '0';
lenc = 1;//循环变量
while ((lenc <= lena) || (lenc <= lenb))//循环直到lenc等于al或者bl的长度
{
c[lenc] = a[lenc] + b[lenc] + x;//(核心)把这两个数字加起来,并且加上进位
x = c[lenc] / 10;//如果两个数加起来大于10,x就是1,否则取余的结果就是 0
c[lenc] = c[lenc] % 10;//
lenc ++;//自增 1
}
c[lenc] = x;/*把最后一位进位过来*/
while (c[lenc] == 0)//如果最后一位为零
{
lenc --;//把最后一位不输出
}
for (int i = lenc;i >= 1;i --)//输出
{
cout << c[i];
}
cout << endl;//回车
return 0;
}
高精度减法
题目描述
输入两个大整数a,b,输出他们的差。(1<=a,b<=10的100次方)
输入
输入两个大整数a和b。
输出
输入a减b的差。
样例输入
35 45
样例输出
-10
程序+注释
#include <bits/stdc++.h>
using namespace std;
char s1[1000],s2[1000];
int a[1000],b[1000],c[1000];
int main()
{
char n[1000];
scanf("%s %s",s1,s2);//也不能用gets
if (strlen(s1) < strlen(s2) || strlen(s1) == strlen(s2) && strcmp(s1,s1) < 0)// 如果减数 大于 被减数
{
strcpy(n,s1);strcpy(s1,s2);strcpy(s2,n);//把s1 和 s2 交换
printf("-");//打印出“- ” 这个符号
}
int len1 = strlen(s1);//s1 的长度
int len2 = strlen(s2);//s2 的长度
for (int i = len1 - 1;i >= 0;i --)//反着存储
{
a[len1 - (i + 1) + 1] = s1[i] - '0';
}
for (int i = len2 - 1;i >= 0;i --)//反着存储
{
b[len2 - (i + 1) + 1] = s2[i] - '0';
}
for (int i = 1;i <= len1;i ++)
{
a[i] = a[i] - b[i];//标准减法,把 a[i] - b[i] 的结果存在 a[i] 里面
if (a[i] < 0)//退位
{
a[i] = a[i] + 10;
a[i + 1] --; //后面的一位自减1
}
}
while (a[len1] == 0)//如果最后一位为零
{
len1 --;//把最后一位不输出
}
for (int i = len1;i >= 1;i --)//输出
{
printf ("%d",a[i]);//输出
}
}