高精度后续代码
2023-08-15 20:44:39
发布于:广东
#include<bits/stdc++.h>
using namespace std;
int a[100000005]; //保存被乘数
int b[100000005]; // 保存乘数
int c[100000005]; // 保存两者的积
int main(){
string s1,s2;
cin >> s1 >> s2;
// 1、逆序存储
int len = s1.size();
for(int i = 0 ; i < len ; i ++ ){
a[len-i-1] = s1[i] - '0';
}
len = s2.size();
for(int i = 0 ; i < len ; i ++ ){
b[len-i-1] = s2[i] - '0';
}
int lena,lenb;
lena = s1.size();
lenb = s2.size();
for(int i = 0 ; i < lena ; i ++ ){ // 被乘数
for(int j = 0 ; j < lenb ; j ++ ){//乘数
c[i + j] += a[i] * b[j];
// 位数上的相乘操作,得到的结果位数为两者位数之和。
if(c[i+j] >= 10){
// 如果得出来的数字要大于10,则要前进位
c[i+j+1] += c[i+j]/10;
// 获取当前位数上的超出10的部分,向前一位累加
c[i+j] %= 10 ;
// 保留下低于10的部分。
}
}
}
len = lena + lenb;
while(len > 1 && c[len-1] == 0){
len -- ;
}
for(int i = len-1 ; i >= 0 ; i -- )cout << c[i];
return 0;
}
高精度除于低精度
#include<bits/stdc++.h>
using namespace std;
int a[10000005];//被除数
int c[10000005];//商
int main(){
int b;
string s1;
cin >> s1 >> b;
int len = s1.size();
//1、 将被除数顺序存储到数组中
// 因为是从高位开始计算,所以不用逆序存储
for(int i = 0 ; i < len ; i ++ ){
a[i] = s1[i] - '0';
}
// 2、 高精相除处理
long long r = 0;
// r储存临时的相除数
for(int i = 0 ; i < len ; i ++ ){
// 开始相除
//将当前位数上的数字累加进r里面,看看能不能相除
r = r * 10 + a[i];
if(r >= b){
// 如果当前合成的数字已经可以相除了
c[i] = r/b;
//得到商,保存
r%=b;
//留下余数到下一轮相除
}
}
int lenc = s1.size();
int cnt = 0 ;
// 去除前导零
while(cnt < lenc - 1 && c[cnt] == 0 ){
cnt ++ ;
}
//顺序输出
for(int i = cnt ; i < lenc ; i ++ ){
cout << c[i];
}
cout <<endl<< r << endl;
return 0;
}
全部评论 7
方老师,发红包发红包发红包发红包发红包
2023-08-19 来自 浙江
1X02后万老师看到我总是很。。。的
2023-09-15 来自 广东
0老师,你怎么去广深营了
2023-08-31 来自 浙江
0老师你真好
2023-08-16 来自 广东
0真好,我的帖子还寻思着要出一下,但是不会写QAQ
2023-08-15 来自 上海
0👍👍👍
2023-08-15 来自 河北
0老师你人真好
2023-08-15 来自 广东
0+1
2023-08-15 来自 广东
0+1
2023-08-27 来自 广东
0
有帮助,赞一个