最短的计算大数乘法的c程序

#include <stdio.h>
char s[99],t[99];
int m,n;
void r(int i,int c)
{
  int j=0,k=i;
  while(k)c+=s[j++]*t[k---1];
  if(i)r(i-1,c/10);
  printf("%d",c%10);
}
void main()
{
  gets(s);gets(t);
  while(s[n])s[n++]-=48;
  while(t[m])t[m++]-=48;
  r(m+n-1,0);
}



说明:

1.这个程序接收2个从键盘输入的整数,计算他们的乘积,并输出结果。

输入的两个整数的总长度不能大于99.

2.这个程序没什么大用,只是用来玩玩儿而已。

3.这个程序的主要目标是使用尽可能短的代码来实现大数乘法。上面的代码

可在VC下编译并运行. 在GCC下编译,可省略#include语句和void关键字,

去除回车和不必要的空格,总长度仅仅196个字节。

另外,程序刻意避免使用数组来存贮中间结果和最终结果。

为此,使用了递归程序,同时,递归的使用也简化了代码。

4.在实际工作中,千万不要写这样的程序,否则会被骂死。

5.不要用这个程序考你的学生和面试者,即使他宣称精通C语言。

此类最短程序的特点

1.经常使用全局变量,全局变量的优点是

1).自动初始化数组和单变量为0,可省去某些变量初始化语句。

2).数组初始化为0也使得逻辑更简单,可省去某些边界值的判断。

3).在子程序,直接使用全局变量可省去某些参数定义和参数传递语句。

2.在表达式,大量使用“++”或者“--”之类运算符,此类语句往往起到

一箭双雕的效果,可有效的缩短代码长度.但在工作中,我强烈反对使用

这类运算符。

3.在比较语句中,很少使用if(i>=c)这类语句,而是使用“if(i)”这样的

写法,这种写法比">=c"少了3个字母。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-05 04:55:25

最短的计算大数乘法的c程序的相关文章

[POJ] #1002# Exponentiation : 大数乘法

一. 题目 Exponentiation Time Limit: 500MS   Memory Limit: 10000K Total Submissions: 156373   Accepted: 38086 Description Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of

大数乘法的几种算法分析及比较(2014腾讯南京笔试题)

转自:http://blog.csdn.net/chhuach2005/article/details/21168179 1.题目 编写两个任意位数的大数相乘的程序,给出计算结果. 2.题目分析 该题相继被ACM.华为.腾讯等选作笔试.面试题,若无准备要写出这种程序,还是要花一定的时间的.故,觉得有必要深入研究一下.搜索了网上的大多数该类程序和算法,发现,大数乘法主要有模拟手工计算的普通大数乘法,分治算法和FFT算法.其中普通大数乘法占据了90%以上,其优点是空间复杂度低,实现简单,时间复杂度为

c语言-大数乘法(16进制)

由来 由于工作中用到,自己在网上找了一些大数乘法源码,都没有符合我要求的.所以自己实现了一个. 分析过程 仿照我们小学学过的10进制乘法算式,来实现的大数乘法. 先举一个例子:234 * 567 这是我们最普通的乘法算式,对于程序实现起来还有点难,因此我们再继续计算分析: (注:图中的小数字,不是次方,只是进位的数) 这个计算过程跟上图的区别就是加法跟乘法分开来计算,我在做乘法部分的时候,只是单纯的计算乘法,没有做加法,把进位的数标记出来,最后把在同一列的数字统统加起来,该进位的进位,最后起算出

大数乘法

1027 大数乘法 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出2个大整数A,B,计算A*B的结果. Input 第1行:大数A 第2行:大数B (A,B的长度 <= 1000,A,B >= 0) Output 输出A * B Input示例 123456 234567 Output示例 28958703552 相关问题 大数加法 0 大数开平方 640 大数进制转换 320 大数除法 320 大数乘法 V2 80 代码: 1 #inclu

组合数学 + 大数乘法 + 大数除法 之 hdu 1261 字串数

//  [3/17/2015 JmingS] /* 此题可直接推导出公式: {(A1+A2+……+An)!} / {A1!A2!……An!} 由于 (12×26)! = 312! 只能通过数组来存储,所以又涉及『大数乘法』和『大数除法』, 大数实现的主要思想模拟手算,具体参考程序. */ 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstring> 5

51 Nod 1028 大数乘法 V2【Java大数乱搞】

1028 大数乘法 V2 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 给出2个大整数A,B,计算A*B的结果. Input 第1行:大数A 第2行:大数B (A,B的长度 <= 100000,A,B >= 0) Output 输出A * B Input示例 123456 234567 Output示例 28958703552 题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemI

大数乘法的C代码实现

在C语言中,宽度最大的无符号整数类型是unsigned long long, 占8个字节.那么,如果整数超过8个字节,如何进行大数乘法呢? 例如: $ python Python 2.7.6 (default, Oct 26 2016, 20:32:47) ...<snip>.... >>> a = 0x123456781234567812345678 >>> b = 0x876543211234567887654321 >>> print

大数乘法(C语言实现)

实现过程分析: 我们回忆一下,在我们小时候刚接触多位数的乘法,我们的数学老师会交给我们一个方法,那就是"乘法的竖式计算".在这里我们就采用该思想解决大数乘法的问题. 以下是我们经常进行乘法的竖式运算: 根据以上的竖式运算,我们实现过程总结如下: 1.先使用两个字符数组保存两个大数据: 2.用第一个数据的个位与第二个数据的所有位相乘,并进行进位调整,即如果该位的数值大于9,就将该数值的十位加到前一位,并将该位的个位保存在原位,将该结果保存在暂存数组temp中. 3.将temp与结果数组r

51 Nod 1027 大数乘法【Java大数乱搞】

1027 大数乘法 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出2个大整数A,B,计算A*B的结果. Input 第1行:大数A 第2行:大数B (A,B的长度 <= 1000,A,B >= 0) Output 输出A * B Input示例 123456 234567 Output示例 28958703552 题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1027 分