输入二个64位的十进制数,计算相乘之后的乘积。
答:以下代码为网上别人贴出的,输入任意位数十进制数(包括小数,负数)都可以得出正确结果。
思路是:将大数当作字符串进行处理,也就是将大数用10进制字符数组进行表示,然后模拟人们手工进行“竖式计算”的过程编写乘法。
#include <iostream.h>
#define MAX 100
int str_num(char str[]) //计算字符串的长度,等效于strlen(str);
{
int i=0,num_str=0;
while(str[ i ]!=0)
{num_str++;
i++;
}
return(num_str);
}
void place(int num_str,char str[]) //将字符串高低颠倒。
{
int temp=0,i=0,j=0;
for(i=0,j=num_str-1;i<j;i++,j--)
{temp=str[j];
str[j]=str[ i ];
str[ i ]=temp;
}
}
void transition(unsigned int a[],char str1[]) //数字字符转化为数字。
{
int i=0;
while(str1[ i ]!=0)
{a[ i ]=str1[ i ]-'0';
i++;
}
}
void multiply_int(unsigned int a[],unsigned int b[],unsigned int c[]) //大数相乘算法,入口为整形数组。
{
int i=0,j=0;
for(i=0;i<MAX;i++)
for(j=0;j<MAX;j++)
{
c[ i+j ]+=a[ i ]*b[ j ];
c[ i+j+1 ]+=c[ i+j ]/10;
c[ i+j ]%=10;
}
}
void