高精度算法:高精度数乘以高精度数的详解

还是昨天的内容和代码:

include<bits/stdc++.h>

int main()
{
string s1="";
string s2="";
int a[250]={0}; //存储s1逆序
int b[250]={0}; //存储s2逆序
int c[500]={0}; //存储最终结果
cin>>s1>>s2;
for(int i=0;i<s1.size();i++)
{
a[i]=s1[s1.size()-1-i]-'0'; //将字符数组中的字符转换为阿拉伯数字进行计算
}
for(int i=0;i<s2.size();i++)
{
b[i]=s2[s2.size()-1-i]-'0'; //同上
}
for(int i=0;i<s2.size();i++)
{
for(int j=0;j<s1.size();j++) //两层循环
{
c[j+i]=c[j+i]+a[j]*b[i]; //利用单精度乘以多精度的算法先循环一层,然后外层循环进行第二层,错位进行相加的思想值得学习
if(c[j+i]>=10)
{
c[j+i+1]+=c[j+i]/10; //进位
c[j+i]=c[j+i]%10; //同上
}
}
}
int index=0; //记录最高数位
int len=s1.size()+s2.size(); //两个数相乘,最大位数不会超过两个数的位数相加
for(int i=len-1;i>0;i--)
{
if(c[i]!=0)
{
index=i; //利用循环从后往前找最大位数,这里的从后往前是因为先前的字符数组是倒序存进来的
break;
}
}
for(int i=index;i>=0;i--)
{
cout<<c[i]; //找到最高数位之后倒序输出
}
system("pause");
return 0;
}

这是每一步对昨天的内容的详解,若是不理解可以多看几遍

posted @ 2025-07-22 21:40  暗神酱  阅读(14)  评论(0)    收藏  举报