今天给大家带来一道题目:

使用数组完成两个超长(位数长度小于 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语言—超长正整数的乘法实现简洁版相关推荐

  1. 高精度数乘法进位c语言,C语言中的高精度乘法

    大一新生初谈C语言中的高精度乘法 1.为什么需要高精度乘法及其实质 我们知道,计算机内部直接用int或double等数据类型储存数字是有范围限制的,即当数据运算大小过大后,计算机将会出现溢出情况,使得 ...

  2. c语言里的乘法函数,C语言中的高精度乘法

    大一新生初谈C语言中的高精度乘法 大一新生初谈C语言中的高精度乘法 1为什么需要高精度乘法及其实质 2高精度乘法原理 3高精度乘法的实现 a 运算前的准备 b一位位地运算 c处理进位 d输出结果 4整 ...

  3. C语言将正整数转换为字符串(附完整源码)

    C语言将正整数转换为字符串 C语言将正整数转换为字符串完整源码 C语言将正整数转换为字符串完整源码 #include <assert.h> #include <inttypes.h& ...

  4. 正整数 java_JAVA语言:正整数A+B(Java)PAT团体程序设计题解

    本文主要向大家介绍了JAVA语言:正整数A+B(Java)PAT团体程序设计题解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 本题的目标很简单,就是求两个正整数A和B的和,其中A和 ...

  5. I00029 C语言程序-打印九九乘法表

    这是小时候背的九九乘法表,是中文版,不是数字版,用C语言程序打印出来了. C语言程序如下: /* I00029 C语言程序-打印九九乘法表 */#include <stdio.h> #in ...

  6. ​用c语言打印自定义的乘法口诀表。例如:输入9,输出9*9口诀表,输入12,输出12*12的乘法口诀表。...

    用c语言打印自定义的乘法口诀表.例如:输入9,输出9*9口诀表,输入12,输出12*12的乘法口诀表. #include <stdio.h> int main () { int n; in ...

  7. c语言乘法口诀表的流程图_例18:C语言编程实现九九乘法表

    例18:C语言编程实现九九乘法表,样式要求长方形.右三角形.左三角形. 解题思路:这个问题的算法很简单,就是两个for循环的嵌套,三角形的样式就是多了一些空格. 长方形源代码演示: #include& ...

  8. 程序设计大作业---超长正整数的减法

    [问题描述] 编写程序实现两个超长正整数(每个最长80位数字)的减法运算. [输入形式] 从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083). 1. 第一行是超长正整数A: 2. 第二行 ...

  9. 如何用Java语言打印出九九乘法表

    用Java语言实现输出九九乘法表 九九乘法表的打印对于每个初学Java的人来说都是必须要掌握的基本内容,其解决方法就是利用嵌套循环来实现九九乘法表的输出,主本题主要考察对循环语句的掌握情况. 输出样例 ...

最新文章

  1. c# 小票打印机打条形码_C#打印小票自带条形码打印
  2. 常见的canvas优化——模糊问题、旋转效果
  3. SQL与NoSQL区别-读写性能
  4. Ptthon学习记录(八)-------list和元组
  5. redis6.0中的多线程
  6. ChannelFactory.Endpoint 上的地址属性为空。ChannelFactory 的终结点必须指定一个有效的地址。...
  7. redis session java获取attribute_面试题:给我说说你能想到几种分布式session实现?...
  8. 计算当前序列的字典序序号(洛谷P2524题题解,Java语言描述)
  9. hashmap头插法和尾插法区别_Java程序员必知:HashMap进行put操作会不会引起死循
  10. Scala,一门「特立独行」的语言!
  11. 复习各种符号 字符 巩固基础2
  12. Enterprise Manager无法连接到实例错误解决
  13. mysql 拼音首字母排序
  14. Git基本操作(学习笔记)
  15. 服务器里网页不显示图片,网页上看不到图片的解决方法步骤
  16. BScroll案例--如何确定中间部分的高度
  17. 开源机器学习项目的简单介绍
  18. C语言如何设置随机数
  19. Google翻译(Java)
  20. 哈哈哈哈,16 岁高中生开发「粤语编程」项目,在 GitHub 火了!

热门文章

  1. 无损视频合并软件有哪些?如何合并视频
  2. centos7解压rar包
  3. OGG跳过事务 logdump FORCETRANS begin now
  4. 使用 SAP UI5 绘制 Business Rule Control
  5. logo在线生成怎么操作?手机也能轻松生成
  6. 《向上生长》读书摘记
  7. 破除谷歌浏览器Google Chrome启动时打开hao123,2345等流氓网页
  8. 华为模拟器三个路由器全网互通
  9. matlab使用杂谈5-fftshift函数的使用
  10. 车载FAKRA和HSD连接器