//之前有个测试这个题没做完,现在把它做完,通过这个程序可以对乘法了解更深刻。分析:运用整数乘法,当然进制越高越好,考虑到乘法不要越界,故考虑进制底数N应该满

//足,N^2<2^32次方。所以N最多取四个字符组成的数字。当然我们也可以取LONGLONG的乘法,那么可以取9个字节。

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>

void sub(char* a, char* sub, int pos, int posn)//sub中不包括a[posn]
{
for(int i=0; i<posn-pos; i++)
sub[i] = a[pos + i];
sub[i] = '\0';
};

int *multi(char *x, char *y, int &sAns){
int sx = strlen(x);
int sy = strlen(y);
int beginX = 0, beginY=0;
if(x[0]=='-') {x[0]='0'; beginX++;}
if(y[0]=='-') {y[0]='0'; beginY++;}
char subx[5],suby[5];//
int i,j,tx,ty;//
sAns = ((sx-1)/4+1 + (sy-1)/4+1);

int * anss = (int *) malloc(sAns*4);
for (i=0; i<sAns; i++)
anss[i] = 0;
for(i=1; i<=(sx-1)/4+1; i++){
sub(x, subx, sx-((i*4)<(sx-beginX)? (i*4):(sx-beginX)), sx-i*4+4);
tx = atoi(subx);
for(j=1; j<=(sy-1)/4+1; j++){
sub(y,suby, sy-((j*4)<(sy-beginY)? (j*4):(sy-beginY)), sy-j*4+4);
ty = atoi(suby);
anss[sAns - ( i + j) + 1] += tx*ty;
anss[sAns - ( i + j ) ] += anss[sAns - (i+j) +1]/10000;
anss[sAns - ( i + j) + 1] %= 10000;//ensure not cross border
}
}
/*for(j=sAns; j>0; j--){
anss[j-1] += anss[j]/10000;
anss[j] =
}*/
return anss;
};

int main(){
char x[100000],y[100000];//Since sAns is a intager less than 2^32/2, mutipliers' places need to be less than 2^29. ie sizeof(x)<0.5 billion bytes(or                    //sizeof(y)<0.5 billion bytes);
while(scanf("%s%s",&x,&y)){
int flag=0;
if(x[0]=='-') flag++;
if(y[0]=='-') flag++;
int n;
int *a= multi(x,y,n);
if(flag%2 && (n>1||a[0]!=0)) printf("-");
char tt[5],t[5];
t[4]='\0';
int i=0;
while(a[i]==0) i++;
printf("%d", a[i]);
i++;
while(i<n){
if(a[i]<1000) {
itoa(a[i], tt, 10);
int len = strlen(tt);
for(int j=1; j<=len; j++)
t[4-j] = tt[len-j];
while(j<=4) {
t[4-j] = '0';
j++;
}
printf("%s",t);
}
else{
printf("%d", a[i]);
}
i++;
}
printf("\n");
free(a);
}
return 0;
}

大整数相乘的C实现的更多相关文章

  1. 华为OJ机试题目:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘)

    题目描述: 输出两个不超过100位的大整数的乘积. 输入: 输入两个大整数,如1234567 123 输出: 输出乘积,如:151851741 样例输入: 1234567 123 样例输出: 1518 ...

  2. 大整数相乘问题总结以及Java实现

    最近在跟coursera上斯坦福大学的算法专项课,其中开篇提到了两个整数相乘的问题,其中最简单的方法就是模拟我们小学的整数乘法,可想而知这不是比较好的算法,这门课可以说非常棒,带领我们不断探索更优的算 ...

  3. 大整数乘法python3实现

    因为python具有无限精度的int类型,所以用python实现大整数乘法是没意义的,可是思想是一样的.利用的规律是:第一个数的第i位和第二个数大第j位相乘,一定累加到结果的第i+j位上,这里是从0位 ...

  4. 【老鸟学算法】大整数乘法——算法思想及java实现

    算法课有这么一节,专门介绍分治法的,上机实验课就是要代码实现大整数乘法.想当年比较混,没做出来,颇感遗憾,今天就把这债还了吧! 大整数乘法,就是乘法的两个乘数比较大,最后结果超过了整型甚至长整型的最大 ...

  5. 算法笔记_034:大整数乘法(Java)

    目录 1 问题描述 2 解决方案 2.1 蛮力法   1 问题描述 计算两个大整数相乘的结果. 2 解决方案 2.1 蛮力法 package com.liuzhen.chapter5; import ...

  6. 剑指offer第12题打印从1到n位数以及大整数加法乘法

       字符和数字加减就是字符的ASCII码和数字直接加减. 方法一: 1)在字符串操作中给一个整形数字加(字符0)就是把它转化为字符,当然给一个字符减去(字符0)就可以把它转化为数字了:如果确实是最后 ...

  7. Java实现大整数乘法

    1 问题描述 计算两个大整数相乘的结果. 2 解决方案 2.1 蛮力法 package com.liuzhen.chapter5; import java.math.BigInteger; publi ...

  8. SOJ 1002/1003/1004 大整数相加/相乘/相除

    三个题目分别考察大整数相加相乘相除运算.如果按照传统算法是取一个长数组,之后进行模拟或者FFT来进行运算.但是相对繁琐. 后来昨天的青岛区域赛网赛1001,用到了JAVA的BigDecimal,于是反 ...

  9. suseoj 1207: 大整数的乘法(java, 大数相乘, C/C++, 大数相乘)

    1207: 大整数的乘法 时间限制: 1 Sec  内存限制: 128 MB提交: 7  解决: 2[提交][状态][讨论版][命题人:liyuansong] 题目描述 求两个不超过200位的非负整数 ...

随机推荐

  1. Linux下搭建Oracle11g RAC(1)----IP分配与配置IP

    首先需要说明的,我的RAC搭建不是在虚拟机上完成的,而是在实际部署中,二者之间有些许差异,本人水平有限,请见谅. 其中,每台机器至少需要配置3个IP地址,在安装操作系统的过程中,我们需要配置公网IP和 ...

  2. sublime 2如何进入vim模式

    点击菜单栏[Preferences]——[Settings - Defaults] 查找: "ignored_packages": ["Vintage"] 改为 ...

  3. SCIP读书笔记(1)

    这书也算是必修吧,尤其是我这种非科班人员,还是应该抽时间尽量学习一下.大致翻过一遍,习题非常多,尽力吧. ##构造过程抽象 * 为了表述认知,每种语言都提供了三种机制:基本元素:组合方式:抽象方法. ...

  4. PHP之APC缓存详细介绍

    1.APC缓存简介 APC,全称是Alternative PHP Cache,官方翻译叫"可选PHP缓存".它为我们提供了缓存和优化PHP的中间代码的框架. APC的缓存分两部分: ...

  5. JDK1.8聚合操作

    在java8 JDK包含许多聚合操作(如平均值,总和,最小,最大,和计数),返回一个计算流stream的聚合结果.这些聚合操作被称为聚合操作.JDK除返回单个值的聚合操作外,还有很多聚合操作返回一个c ...

  6. 错误:Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046} failed due to the following error: 80070005 拒绝访问。

    最近,把一个网站部署到另一个服务器上,网站中一个功能word转pdf报下面错误: 在此附上解决方案: 方法1:配置Web.Config文件,在每次请求时模拟本地系统的账户. 具体操作:在Web.Con ...

  7. SQL性能优化没有那么神秘

    经常听说SQL Server最难的部分是性能优化,不禁让人感到优化这个工作很神秘,这种事情只有高手才能做.很早的时候我在网上看到一位高手写的博客,介绍了SQL优化的问题,从这些内容来看,优化并不都是一 ...

  8. js--Ajax的小知识(二):处理ajax的session过期的请求

    问题的产生: 现如今Ajax在Web项目中应用广泛,几乎可以说无处不在. 有时会碰到这样个问题:当Ajax请求遇到Session超时,应该怎么办? 显而易见,传统的页面跳转在此已经不适用,因为Ajax ...

  9. List集合的去除重复性练习

    package com.java.b.listdmeo.www; import java.util.ArrayList;import java.util.Iterator; import com.ja ...

  10. Visual C++ 编程实现Soft AP (HostedNetwork / 承载网络) 功能

    从Windows 7开始,微软在操作系统中加入的Soft AP功能,使用户能够通过无线网卡,开启虚拟AP,从而实现网络共享.Soft AP又称HostedNetwork(承载网络),在Windows ...