实现两个大数相乘

#include <iostream>
#include <string.h>
#define MAX 201
using namespace std;
int result[MAX], result1[MAX] ;


void Pow(int n, int *result1, int *r, int len1)
{
int len2, i, j, k ;
len2 = len1 ;
for(k = 1; k < n; ++k)
{
for(i = 0; i < len1; ++i)
for(j = 0; j < len2; ++j)
result[i + j] += r[i] * result1[j] ;   //
for(i = 0; i < len1 + len2; ++i)   //
{
if(result[i] > 9)
{
result[i + 1] += result[i] / 10 ;
result[i] %= 10 ;
}
}//
i = MAX - 1 ;
while (result[i] == 0)
          --i ;
len2 = i + 1 ;   //
for(j = 0; j < len2; ++j)
result1[j] = result[j] ;   //
memset(result, 0, sizeof(result)) ;   //
}
}


void Display(int point)
  {
int i, len2, z ;
i = MAX - 1 ;
while(result1[i] == 0 && i >= 0)
 --i ;
len2 = i ;  //
    if(len2 == -1)
{
cout<<"0"<<endl ;
return ;
}
if(point > len2 + 1)
{
cout<<"." ;
for(i = 0; i < point - len2 - 1; ++i)
cout<<"0" ;
}
i = 0 ;
while(result1[i] == 0 && i < point)
i++ ;
z = i ;   //
for(i = len2; i >= z; --i)
{
 if(i == point - 1)
 cout<<"." ;
 cout<<result1[i] ;
}
cout<<endl ;
}
int main()
  {
int r[6] ;     //
char R[7] ;    //
int i, j, point, len, n ;
    while (cin>>R>>n)
    {
memset(result, 0, sizeof(result)) ;
memset(result1, 0, sizeof(result1)) ;
point = 0 ;
len = strlen(R) ;
for(i = 5, j = 0; i >= 0; --i)
{
if(R[i] == '.')
{
 point = 5 - i ;   //
 len -= 1 ;
}
  else
{
r[j] = R[i] - '0' ;      //
result1[j] = R[i] - '0' ;
++j ;
  }
}
//
Pow(n, result1, r, len) ;   //
Display(point * n) ;
    }
return 0 ;

}




这是代码,可是代码没解释,有没有人能帮我补充一下?理解一下?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值