高精度(加+,乘*)【C/C++】
不得不说,高精度对于我还是一个难点,这两天疯狂的找有关高精度的题和题解逐个分析,现在终于是了解一点了。但是还不够能力靠自己的思路写出属于自己的高精度代码,看着题解只能写出自己比较容易理解的代码,很像一位大佬的码风。
高精度相加
A+B Problem(高精)
题目描述
高精度加法,相当于a+b problem,不用考虑负数.
输入格式
分两行输入。a,b≤10 ^500
输出格式
输出只有一行,代表a+b的值
输入输出样例
输入 样例1
1
1
输出 样例1
2
输入 样例2
1001
9099
输出 样例2
10100
#include<bits/stdc++.h>
using namespace std;
char c[999999],d[999999];
struct note{
int len;
int data[999999];
}a,b,s; //sum
void ad()
{
s.len=max(a.len,b.len);
for(int i=1;i<=s.len;i++){
s.data[i]+=a.data[i]+b.data[i];
s.data[i+1]=s.data[i]/10;
s.data[i]=s.data[i]%10;
}
while(s.data[s.len+1]!=0) s.len++;
}
int main()
{
cin>>c;
cin>>d;
a.len=strlen(c);
b.len=strlen(d);
for(int i=0;i<a.len;i++) a.data[a.len-i]=c[i]-'0'; //a.data[0]=c[0]
for(int i=0;i<b.len;i++) b.data[b.len-i]=d[i]-'0';
ad();
for(int i=s.len;i>=1;i--) printf("%d",s.data[i]);
return 0;
}
高精度相乘
A*B Problem
题目描述
求两数的积。
输入格式
两行,两个整数。
输出格式
一行一个整数表示乘积。
输入输出样例
输入
1
2
输出
2
说明/提示
每个数字不超过 10^ 2000,需用高精。
#include<bits/stdc++.h>
using namespace std;
char c[999999],d[999999];
struct note{
int len;
int data[999999];
}a,b,s;
void multiplication()
{
for(int i=1;i<=a.len;i++){
int x=0;
for(int j=1;j<=b.len;j++){
s.data[i+j-1]+=a.data[i]*b.data[j]+x; //a,b的序号写错
x=s.data[i+j-1]/10;
s.data[i+j-1]%=10;
}
s.data[i+b.len]=x;
}
s.len=a.len+b.len; //s的长度忘记写,如何写
while(s.data[s.len]==0&&s.len!=1) s.len--;
}
int main()
{
cin>>c;
cin>>d;
a.len=strlen(c);
b.len=strlen(d);
for(int i=0;i<a.len;i++) a.data[a.len-i]=c[i]-'0';
for(int i=0;i<b.len;i++) b.data[b.len-i]=d[i]-'0';
multiplication();
for(int i=s.len;i>=1;i--) printf("%d",s.data[i]);
return 0;
}
好啦!!!接下来要开始刷真题咯