4 solutions
-
2
#include<bits/stdc++.h> using namespace std; int l1,l2; int chengshu1[1005],chengshu2[1005],ji[1005]={0};//三个数组,分别存储两个乘数与积,要开到1005,本人亲测205会寄 void input(string s,int a[]){//输入函数,具体功能不多赘述 int len=s.length(); for(int i=0;i<len;i++){ a[len-i-1]=s[i]-'0'; } } void APAmul(int a[],int b[],int c[]){//高精度乘法函数 for(int i=0;i<1004;++i){//这里i<1004是因为数组长度是1005 for(int j=0;j<=i;++j){ c[i]+=a[j]*b[i-j];//分别叠加 } if(c[i]>=10){//进位 c[i+1]+=c[i]/10; c[i]%=10; } } } void output(int d[]){//输出函数 int i; for(i=1004;i>=1;--i){//此处同理 if(d[i]!=0)break;//寻找前导0结束的位置 } for(;i>=0;--i){ cout<<d[i]; } cout<<"\n"; } int main(){ string n1,n2; cin>>n1>>n2; input(n1,chengshu1);//分别存储两个乘数 input(n2,chengshu2); APAmul(chengshu1,chengshu2,ji);//进行高精度乘法 output(ji); return 0; }
-
1
#include <bits/stdc++.h> using namespace std; int a[205],b[205],c[405]; string s1,s2; int main(int argc, char **argv){ cin >> s1 >> s2; int l1 = s1.length(),l2 = s2.length(); for (int i = 0;i < l1;i++){ a[l1 - i] = s1[i] - '0'; } for (int i = 0;i < l2;i++){ b[l2 - i] = s2[i] - '0'; } int jw = 0; for (int i = 1;i <= l1;i++){ jw = 0; for (int j = 1;j <= l2;j++){ c[i + j - 1] = a[i] * b[j] + jw + c[i + j - 1]; jw = c[i + j - 1] / 10; c[i + j - 1] %= 10; } c[i + l2] = jw; } int l3 = l1 + l2; while(c[l3] == 0){ l3--; } for (int i = l3;i > 0;i--){ cout << c[i]; } return 0; }
-
0
#include <bits/stdc++.h> using namespace std; string a,b; int numa[300],numb[300],sum[600]={0}; int main() { cin>>a>>b; for(int i=0;i<a.size();i++)numa[i]=a[a.size()-1-i]-'0'; for(int i=0;i<b.size();i++)numb[i]=b[b.size()-1-i]-'0'; for(int i=0;i<a.size();i++)for(int j=0;j<b.size();j++)sum[i+j]+=numa[i]*numb[j]; for(int i=0;i<599;i++){ sum[i+1]+=sum[i]/10; sum[i]%=10; } bool f=false; for(int i=599;i>=0;i--)if(sum[i]!=0||f){ cout<<sum[i]; f=true; } if(!f)cout<<"0"; return 0; }
-
0
题解
这种题不用讲思路了吧(bushi)
给个赞呗#include<bits/stdc++.h> using namespace std; void CHENG(string& a,string b){ string c=a; int ans[1001]={}; for(int i=0;i<b.size();i++)b[i]-='0'; for(int i=0;i<c.size();i++)c[i]-='0'; reverse(c.begin(),c.end()); reverse(b.begin(),b.end()); for(int i=0;i<int(c.size());i++){ for(int j=0;j<int(b.size());j++){ ans[i+j]+=c[i]*b[j]; } } for(int i=0;i<1001;i++){ if(ans[i]>=10){ ans[i+1]+=ans[i]/10; ans[i]%=10; } } string x=""; int t=999; while(!ans[t])t--; t++; for(int i=0;i<t;i++){ x+=to_string(ans[i]); } reverse(x.begin(),x.end()); a=x; } int main(){ string a,b; cin>>a>>b; CHENG(a,b); cout<<a; }
- 1
Information
- ID
- 660
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- # Submissions
- 91
- Accepted
- 35
- Uploaded By