//之前有个测试这个题没做完,现在把它做完,通过这个程序可以对乘法了解更深刻。分析:运用整数乘法,当然进制越高越好,考虑到乘法不要越界,故考虑进制底数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. 百度地图BMap API实例

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  2. SQL Server中建立外键的方法

    在SQL中建立外键约束,可以级联查询表中的数据,在C#代码生成器中,也能根据外键关系生成相应的外键表数据模型.外键也可防止删除有外键关系的记录,一定程度上保护了数据的安全性. 步骤: 1.要建立外键关 ...

  3. 30、ADO.NET、事务、DataSet

    ADO.NET ADO.NET是一组用于和数据源进行交互的面向对象类库.通常数据源是数据库,但也可以是文本文件.Excel表格.XML文件. 说白了就是使用.net操作数据库的一套类库. ADO.NE ...

  4. Java中OutOfMemoryError(内存溢出)的情况及解决办法

    java.lang.OutOfMemoryError: Java heap space // TODO Auto-generated method stub Vector v = new Vector ...

  5. enableEventValidation

    回发或回调参数无效.在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEve ...

  6. 自定义组合控件,适配器原理-Day31

    自定义组合控件,适配器原理-Day31 mobile2.1 主页定义 手机上锁功能 1.弹出设置密码框. 手机下载进度 自定定义控件 控件的属性其实就是控件类一个属性设置属性调用类的set方法方法, ...

  7. Maven3(笔记二)

    笔记本二   在Eclipse 中使用Maven 第一节:m2eclipse 插件安装 打开Eclipse,点击菜单Help - > Install New Software 点击Add 按钮N ...

  8. 使用sprintf打印float并控制小数位数时引起的问题

    最近在做项目中发现一个Bug,直接把进程搞死,查了一下,居然是一个最不起眼的地方导致的,在此记录一下. 先看下面代码 #include <iostream> #include <st ...

  9. 接触.net5年了,感觉自己的知识面很狭隘。

    08年毕业找工作期间开始接触网页开发,由于在学校了混了4年时间,我只能从html标记语言开始学习,后来应聘到一个网站建设公司,开始学习ps.Dreamweaver和asp.由于基础薄弱,一个月后离开了 ...

  10. Windows Phone 之下拉菜单ListPicker

    默认情况下,Visual Studio的ToolBox里没有任何下拉菜单的控件可供使用,虽然可以手工输入代码使用隐藏的ComboBox来实现下拉菜单,但是显示出来的菜单与Metro UI主题不匹配.S ...