当前位置: 首页 > news >正文

C语言:高精度乘法

P1303 A*B Problem - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

第一次画图,略显简陋。

由图可以看出c的小标与x,y下标的关系为x的下标加上y的下标再减一。

由此得到: c [ i + j - 1 ] = x [ i ] * y [ j ]x

#include<stdio.h>
#include<string.h>
char x[2005];//存储第一个整数,转为字符串方便计数长度和位运算
char y[2005];//存储第二个整数,转为字符串方便计数长度和位运算
int a[2005];//逆序存储第一个整数,方便相同位的运算
int b[2005];//逆序存储第二个整数,方便相同位的运算
int c[4005];//逆序存储结果
int main()
{scanf("%s", x);scanf("%s", y);size_t la = strlen(x);//计算x的长度size_t lb = strlen(y);//计算y的长度size_t lc = la + lb;//c的最大长度为x+yfor (int i = 0; i < la; i++){a[la - i] = x[i] - '0';//逆序存储x}for (int i = 0; i < lb; i++){b[lb - i] = y[i] - '0';//逆序存储y}for (int i = 1; i <= la; i++){for (int j = 1; j <=  lb; j++){c[i + j - 1] += a[i] * b[j];//c的第i+j-1位为a的第i位乘b的第j位c[i + j] += c[i + j - 1] / 10;//如果c的i+j-1位超过10,则i+j位要加上i+j-1位的十位c[i + j - 1] %= 10;//i+j-1位只留下个位}}while (c[lc] == 0&&lc>0){//数字是倒序存储,所以前面可能出现0lc--;//去除前面可能出现的0}for (size_t i = lc; i > 0; i--){printf("%d", c[i]);//逆序打印}if (x[0] == '0' || y[0] == '0'){printf("0");//如果有一个数是0,会被前面的去除前面的0的步骤删除,所以要单独打印}return 0;
}

http://www.lryc.cn/news/258788.html

相关文章:

  • UE4 Niagara学习笔记
  • 多维时序 | Matlab实现GA-LSTM-Attention遗传算法优化长短期记忆神经网络融合注意力机制多变量时间序列预测
  • LeetCode205. Isomorphic Strings
  • Event Driven设计模式
  • PostgreSql 设置自增字段
  • 什么是泊松图像混合
  • OpenAI 承认 ChatGPT 最近确实变懒,承诺修复问题
  • 创作活动(四十九)———低代码:美味膳食或垃圾食品?
  • 【DL-TensorFlow遇错】TensorFlow中遇错合集
  • pymysql代替mysqlclient,解决mysqlclient因版本不兼容无法安装成功而无法连接mysql的问题
  • uni-app 设置当前page界面进入直接变为横屏模式
  • Mysql的多表联合查询
  • Linux上使用Python的requests库进行HTTP请求
  • 图像处理领域的应用
  • MySQL笔记-第18章_MySQL8其它新特性
  • C语言—每日选择题—Day46
  • flex布局,换行的元素上下设置间距
  • 【智能家居】八、监控摄像采集、人脸识别比对进行开门功能点
  • golang的文件操作
  • 数据库版本管理框架-Flyway(从入门到精通)
  • 外网访问内网服务器使用教程
  • C# Dictionary 利用 ContainsValue 查询指定值是否已经存在
  • 招不到人?用C语言采集系统批量采集简历
  • HXDSP2441-Demo板
  • 静态路由的原理和配置
  • Ubuntu20.04降低linux版本到5.4.0-26-generic
  • C++ 类型萃取
  • 【JVM从入门到实战】(四)类的生命周期
  • 2023年度美食关键词-葱油花卷
  • 「Verilog学习笔记」简易秒表