网站首页 > 文章精选 正文
超大数乘法的关键是如何对齐数据位数,这里引入积的位数l,乘数位数i,被除数位数k,并令l=i+k-1,使问题得以解决,程序如下:
//超大数乘法(超大数:是指超过计算机处理范围的整数)
#include <stdio.h> /*包含输入输出函数*/
#include <string.h> /*包含字符串处理函数*/
#define N 200 //常数N应大于数据的最大位数
main ()
{ char bc[N],cc[N]; //定义字符串数组:被乘数串bc,乘数串cc
int b[N]={},c[N]={},j[N*2]={}; //定义并初始化数组:被乘数b,乘数c,积j
int x,i,k,lb,lc,l; //循环变量x,i,k;被乘数位数lb,乘数位数lc,积的位数l
//输入:
printf("请连续输入被乘数:");gets(bc);
printf("请连续输入乘数:");gets(cc);
//转换:
lb=strlen(bc); lc=strlen(cc); //测字符串长度
for(x=1;x<=lb;x++) {b[x]=bc[lb-x]-48;} //被乘数串转换成整数
for(x=1;x<=lc;x++) {c[x]=cc[lc-x]-48;} //乘数串转换成整数
// 运算:
for(i=1;i<=lc;i++) //乘数
{ for(k=1;k<=lb;k++) //被乘数
{ l=k+i-1; //定位(确定积的位数l)
j[l]+=b[k]*c[i]; //求积并累加上次进位
}
}
for(x=1;x<=l;x++) //重新进位:
{ j[x+1]+=j[x]/10;j[x]%=10; //求进位及本位
}
if(j[l+1]>=1) l++;//处理首位进位及总位数
//输出:
printf("%s*%s=",bc,cc);
for(x=l;x>=1;x--) //从高位到低位
{ if(x%3==0&&x!=l) printf(","); //每3位加一个","
printf("%d",j[x]); //输出积
}
}
猜你喜欢
- 2025-06-08 Java String类(java string类 contains()方法)
- 2025-06-08 西门子 S7-1200 PLC 数据类型详解
- 2025-06-08 C++标准库string 类的size() 和 length() 区别
- 2025-06-08 什么是 Redis?Redis的数据类型有哪些?Redis应用场景有哪些?
- 2025-06-08 LeetCode 力扣官方题解 | 521. 最长特殊序列Ⅰ
- 2025-06-08 js中的JSON.stringify()方法的用法
- 2025-06-08 bitmap很强大,但要谨慎使用(bitmaps)
- 2025-06-08 刷题LeetCode:5.最长回文子串(求最长回文子序列)
- 2025-06-08 以太坊源码(06):RLP 机制分析(以太坊源码解读)
- 2025-06-08 深入解析C++17神器:std::string_view,高效字符串操作秘密武器
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)