高精度乘法

来源:互联网 发布:redis排序 java 编辑:程序博客网 时间:2024/06/05 09:40


#include <stdio.h>
#include <string.h>
#include<iostream>
using namespace std;


char a[101], b[101]; //输入的两个正整数(字符形式)
int len_a, len_b; //输入的正整数长度
int ai[101], bi[101]; //输入的两个正整数(以整数形式存储每一位)
int temp[202]; //每一位乘法的中间结果


void reverse( char s[ ], int si[] ) //以逆序顺序存放大数中的各位数(整数形式)
{
int len = strlen(s);
for( int i=0; i<len; i++ )
si[len-1-i] = s[i]-'0';
}
int main( )
{
int i, j;
while( scanf( "%s", a ) != EOF )
{
scanf( "%s", b );
len_a = strlen(a);  len_b = strlen(b);
reverse(a, ai); reverse(b, bi);
memset( temp, 0, sizeof(temp) );


for( i=0; i<len_b; i++ ) //用大整数b的每位去乘大整数a
{
int start = i;//得到的中间结果跟大整数b中的位对齐
for( j=0; j<len_a; j++ )
{
temp[start++] += ai[j]*bi[i];
}
}
for( i=0; i<202; i++ )//低位向高位进位
{
if( temp[i]>9 )
{
temp[i+1] += temp[i]/10;
temp[i] = temp[i]%10;
}
}
for( i=201; i>=0; i-- )//求乘积的长度
{ if( temp[i] )  break; }
for(;i>=0;i--)
        cout<<temp[i];
    cout<<endl;


}
return 0;
}
0 0