C语言—超长正整数的乘法实现简洁版
今天给大家带来一道题目:
使用数组完成两个超长(位数长度小于 100)正整数的乘法。
从键盘输入两个正整数,输出乘法计算的结果。
题目看起来字很少,可这逻辑过程却不少。
我们知道,不管是 int 还是 long int型,一次性能储存的数据量都是有限的,因此在进行长整型的运算时,我们没法像过去计算短整数乘法一样直接利用内置函数去乘,那…究竟要怎么做呢?这里我采用的方法是———小学生算法,实际上就是模拟手算的过程。
接下来上代码:
#include<stdio.h>
#include<string.h>//进行字符与数字的转换
void CharTranslateToInt(int *pi,char *pc,int i){pi[i] = (int)(pc[i]) - 48;
}int main(void){int i,j,k,temp,shi,ge,num1len,num2len;int num1[100] = {0}, num2[100] = {0};char str[100]; int sum[200] = {0};printf("请输入乘数:");scanf("%s",str);num1len = strlen(str); for(i = 0; i < num1len; i++){CharTranslateToInt(num1,str,i);}printf("请输入被乘数:");scanf("%s",str);num2len = strlen(str);for(i = 0; i < num2len; i++){CharTranslateToInt(num2,str,i);}
//这里将每一次相乘的数加到对应位置上for(i = num1len - 1; i >= 0; i--){for(j = num2len - 1; j >= 0; j--){temp = num1[i] * num2[j];sum[num1len + num2len - 2 - i - j] += temp;}}
//接下来统一每一位满十往上一位进一for(i = 0; i < 199; i++){ge = sum[i] % 10;shi = sum[i] / 10;sum[i] = ge;sum[i+1] += shi; }
//从数组的末尾开始遍历,找到第一位非零数for(i = 199;i >= 0; i--){if(sum[i]){k = i;break;}}
//接下来就是打印结果啦printf("k = %d\n",k) ;for(i = k; i >= 0; i--){printf("%d",sum[i]);}return 0;
}
输出图如下~
那么问题来了,如何验算你的答案就是正确的呢?其实算一下最后一位的还有短整数的乘法就Ok啦
欢迎讨论~
C语言—超长正整数的乘法实现简洁版相关推荐
- 高精度数乘法进位c语言,C语言中的高精度乘法
大一新生初谈C语言中的高精度乘法 1.为什么需要高精度乘法及其实质 我们知道,计算机内部直接用int或double等数据类型储存数字是有范围限制的,即当数据运算大小过大后,计算机将会出现溢出情况,使得 ...
- c语言里的乘法函数,C语言中的高精度乘法
大一新生初谈C语言中的高精度乘法 大一新生初谈C语言中的高精度乘法 1为什么需要高精度乘法及其实质 2高精度乘法原理 3高精度乘法的实现 a 运算前的准备 b一位位地运算 c处理进位 d输出结果 4整 ...
- C语言将正整数转换为字符串(附完整源码)
C语言将正整数转换为字符串 C语言将正整数转换为字符串完整源码 C语言将正整数转换为字符串完整源码 #include <assert.h> #include <inttypes.h& ...
- 正整数 java_JAVA语言:正整数A+B(Java)PAT团体程序设计题解
本文主要向大家介绍了JAVA语言:正整数A+B(Java)PAT团体程序设计题解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 本题的目标很简单,就是求两个正整数A和B的和,其中A和 ...
- I00029 C语言程序-打印九九乘法表
这是小时候背的九九乘法表,是中文版,不是数字版,用C语言程序打印出来了. C语言程序如下: /* I00029 C语言程序-打印九九乘法表 */#include <stdio.h> #in ...
- 用c语言打印自定义的乘法口诀表。例如:输入9,输出9*9口诀表,输入12,输出12*12的乘法口诀表。...
用c语言打印自定义的乘法口诀表.例如:输入9,输出9*9口诀表,输入12,输出12*12的乘法口诀表. #include <stdio.h> int main () { int n; in ...
- c语言乘法口诀表的流程图_例18:C语言编程实现九九乘法表
例18:C语言编程实现九九乘法表,样式要求长方形.右三角形.左三角形. 解题思路:这个问题的算法很简单,就是两个for循环的嵌套,三角形的样式就是多了一些空格. 长方形源代码演示: #include& ...
- 程序设计大作业---超长正整数的减法
[问题描述] 编写程序实现两个超长正整数(每个最长80位数字)的减法运算. [输入形式] 从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083). 1. 第一行是超长正整数A: 2. 第二行 ...
- 如何用Java语言打印出九九乘法表
用Java语言实现输出九九乘法表 九九乘法表的打印对于每个初学Java的人来说都是必须要掌握的基本内容,其解决方法就是利用嵌套循环来实现九九乘法表的输出,主本题主要考察对循环语句的掌握情况. 输出样例 ...
最新文章
- c# 小票打印机打条形码_C#打印小票自带条形码打印
- 常见的canvas优化——模糊问题、旋转效果
- SQL与NoSQL区别-读写性能
- Ptthon学习记录(八)-------list和元组
- redis6.0中的多线程
- ChannelFactory.Endpoint 上的地址属性为空。ChannelFactory 的终结点必须指定一个有效的地址。...
- redis session java获取attribute_面试题:给我说说你能想到几种分布式session实现?...
- 计算当前序列的字典序序号(洛谷P2524题题解,Java语言描述)
- hashmap头插法和尾插法区别_Java程序员必知:HashMap进行put操作会不会引起死循
- Scala,一门「特立独行」的语言!
- 复习各种符号 字符 巩固基础2
- Enterprise Manager无法连接到实例错误解决
- mysql 拼音首字母排序
- Git基本操作(学习笔记)
- 服务器里网页不显示图片,网页上看不到图片的解决方法步骤
- BScroll案例--如何确定中间部分的高度
- 开源机器学习项目的简单介绍
- C语言如何设置随机数
- Google翻译(Java)
- 哈哈哈哈,16 岁高中生开发「粤语编程」项目,在 GitHub 火了!