2 条题解
-
0
#include<bits/stdc++.h>//导入输出工具库 using namespace std;//规定一个范围空间 叫std
string mull(string s1 , string s2){ //1 - 翻转
reverse(s1.begin() , s1.end()); reverse(s2.begin() , s2.end()); //2 - 把所有的字符 变成 数字 放到对应的数组中 int a[1000] = {0}, b[1000] = {0}, c[1000] = {0}; for(int i = 0;i < s1.size();i++) a[i] = s1[i] - '0'; for(int i = 0;i < s2.size();i++) b[i] = s2[i] - '0'; //3 - 两两数进行相乘 循环嵌套完成 for(int i = 0;i < s1.size();i++){ for(int j = 0;j < s2.size();j++){ c[i + j] += a[i] * b[i]; } } //4 - 处理进位问题 c的位置如果是 大于 10 表示当前位置需要进位 int len = s1.size() + s2.size(); // 任意位数相乘 答案最大的位数 for(int i = 0;i < len;i++){ if(c[i] >= 10){//当前的位数需要进位 c[i + 1] += c[i] / 10;//把当前进位 给到下一位 c[i] = c[i] % 10;//取当前的个位 就是答案 } } //5 - 处理前导零问题 while(len > 1 && c[len - 1] == 0){ len--; } string ans; //6 - 把 数组 变成 字符串 for(int i = 0;i < len;i++){ ans = char(c[i] + '0') + ans; } return ans;
} int main()//主程序的入口 { string s1 , s2; cin >> s1 >> s2; cout << mull(s1 , s2); return 0; }
‘
-
0
#include<bits/stdc++.h> using namespace std; string a1,b1; int a[505],b[505],c[100005]; int lena,lenb,lenc; int main() { cin>>a1>>b1; lena=a1.size(); lenb=b1.size(); for(int i=1;i<=lena;i++) a[i]=a1[lena-i]-'0'; for(int i=1;i<=lenb;i++) b[i]=b1[lenb-i]-'0'; int x=0; for(int i=1;i<=lena;i++) { x=0; for(int j=1;j<=lenb;j++) { c[i+j-1]+=a[i]*b[j]+x; x=c[i+j-1]/10; c[i+j-1]%=10; } c[i+lenb]=x; }
lenc=lena+lenb; while(c[lenc]==0&&lenc>1) lenc--; for(int i=lenc;i>=1;i--) { cout<<c[i]; } return 0;
}
- 1
信息
- ID
- 1678
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 226
- 已通过
- 51
- 上传者