计算两个非负整数 A,B 的乘积,A,B 可能会很大。
输入格式
第一行输入一个非负整数 A。
第二行输入一个非负整数 B。
A,B 的长度不大于 500。
输出格式
输出 A×B的值。
样例输入
4321
1234
样例输出
5332114
#include<iostream>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
char a[502],b[502];
int c[1004];
int main(){
string sa,sb,s;
int d=0,x=0;
cin>>sa>>sb;
int len=max(sa.length(),sb.length());
int len1=sa.length()+sb.length()-1;/*两数相乘最大长度为两数长度之和-1*/
/*反转两个字符串并存入字符数组*/
reverse(sa.begin(),sa.end());
reverse(sb.begin(),sb.end());
strncpy(a,sa.c_str(),sa.length());
strncpy(b,sb.c_str(),sb.length());
/*逐位相乘,第i位的相乘结果存入c[i]*/
for(int i=0;i<sa.length();i++){
int k=i;
for(int j=0;j<sb.length();j++){
if(a[i]=='\0') a[i]='0';
if(b[j]=='\0') b[j]='0';
c[k]=c[k]+(a[i]-'0')*(b[j]-'0');
k++;
}
}
/*处理进位*/
for(int i=0;i<len1-1;i++){
if(c[i]>=10){
c[i+1]=c[i+1]+c[i]/10;
c[i]=c[i]%10;
}
}
int flag=0;
for(int i=len1-1;i>=0;i--){
if(c[i]!=0||i==0) flag=1;
if(flag)
cout<<c[i];
}
return 0;
}