笔试题汇集之大数处理篇(C/C++)

这篇博客介绍了如何使用C/C++处理大数乘法问题,通过将大数作为字符串处理,模拟手工竖式计算的过程。文章提供了两种不同的实现方式,包括使用数组和链表的数据结构来实现大整数的乘法运算,并展示了完整的代码实现。
摘要由CSDN通过智能技术生成

输入二个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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值