#include
using namespace std;
int main(){
string str1,str2;//先用两个串储存数
cin>>str1>>str2;
int len1 = str1.size();//求出串的长度
int len2 = str2.size();
// 分配一个空间,用来存储运算的结果,str1长的数 * str2长的数,结果不会超过str1+str2长
int a[len1 + len2];
fill(a, a + len1 + len2, 0);//fill()函数填充0
for (int i = 0; i < len1; i++)
for (int j = 0; j < len2; j++)
a[len1 + len2 - i - j - 2] += (str1[i] - '0') * (str2[j] - '0');
//不是-1而是-2,因为可能产生进位,留一位给最后的进位
//单独处理进位
for (int i = 0; i < len1 + len2 - 1; i++){
a[i + 1] += a[i] / 10;
a[i] %= 10;
}
int r = len1 + len2 - 1;//逆序输出
while(a[r]==0 && r>0) r--;//循环排除多余0
for (;r >= 0;r--)
cout<return 0;}
请问这几行代码功能是啥,看不懂
for (int i = 0; i < len1; i++)
for (int j = 0; j < len2; j++)
a[len1 + len2 - i - j - 2] += (str1[i] - '0') * (str2[j] - '0');
这个就是模仿人的列竖式手算的过程中的上下每一行对齐相加
str1[i] - '0'
这里是把ascii字符形式的数字通过减去'0'得到数值。