2136 - [数值问题]高精度除以高精度
高精度乘以高精度(highdiv/c/cpp)
【问题描述】
输入两个高精度正整数a和b(a位数<=200,b的位数<=9位),求两数的乘积。
【输入格式】highdiv.in
<span>输入共两行,分别为a和b。</span>
<span>【输出格式】highdiv.out</span>
<span>输出共一行,表示两个数的积。</span>
<span>【输入样例1】 </span><span><br />
9999999999999999999999999999999999
<span style="line-height:21px;">1111111</span>
<span>【输出样例1】</span>
9999999989999999999999999999999999999999999999999999999999999999999999999999
题目输入
题目输出
输入/输出样例
题目输入
题目输出
C++解答
#include <iostream> #include <cstdio> #include <iostream> #include <cstring> using namespace std; int main() { int a[101],b[101],c[101],lena,lenb,lenc,i,j,x; char a1[101],b1[101]; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); gets(a1); gets(b1); lena=strlen(a1); lenb=strlen(b1); for(i=0;i<=lena-1;i++) a[lena-i]=a1[i]-48; for(i=0;i<=lenb-1;i++) b[lenb-i]=b1[i]-48; for(i=1;i<=lena;++i) { x=0; for(j=1;j<=lenb;j++) { c[i+j-1]=a[i]*b[j]+x+c[i+j-1]; 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(i=lenc;i>=1;i--) cout<<c[i]; return 0; }