今天看了两个大数处理的程序,一个是用JAVA 写的,一个是用C写的,处理的确实是挺方便的,虽然现在还没有学JAVA,但看起来感觉很强大,下面把JAVA 代码贴出来,学习一下:

import java.math.BigInteger;
import java.util.Scanner;class Main {public static void main(String args[]) {Scanner s = new Scanner(System.in);BigInteger zero = BigInteger.valueOf(0);BigInteger sum = BigInteger.valueOf(0);for(;;) {BigInteger b = s.nextBigInteger();if(b.equals(zero)) break;sum = sum.add(b);}System.out.println(sum.toString());}
}

短短几行就把这个问题解决了;

下面介绍一下如何使用C来解决大数问题:

大数长度最长为 L ;

定义一个字符数组  s[ L ] ;

定义一个整形数组 a[ L ] ;

定义一个求和的数组 sum[ L ] ;

输入大数到 字符数组 S 中 ,从 S 的最后一个字符开始 把 S[ len - 1 ] - '0' 赋值给 a[ 0 ] ,这样循环下去,使得S中的字符变成整型,并倒续存入整型数组a中,让a中的每个数值与相应的sum中的每个字符相加,和存入sum中;

对sum进行处理,sum[k+1] += sum[k] / 10 ;    sum[k] = sum[k] % 10 ;

倒续输出sum中的数值(前序为0的除外)

详细代码如下:

#include<iostream>
#include<string>
#include<stdio.h>
#include<string.h>
using namespace std ;
int main()      {char s[100] ;int sum[101] = {0} ;while(cin >> s && strcmp(s,"0"))        {int a[101] = {0} ;int len = strlen(s) ;int t = 100 ;for(int i = len - 1 ; i >= 0 ; i--)a[t--] = s[i] - '0' ;for(int j = 100 ; j >= 0 ; j--)sum[j] += a[j] ;for(int k = 100 ; k>= 1; k--)   {sum[k-1] += sum[k] / 10 ;sum[k] = sum[k] % 10 ;}}int start = 0 ;while(start <= 99 && !sum[start])start++ ;while(start<=100)cout << sum[start++] ;cout << endl ;return 0 ;
}

上面只是大数相加,如果存在大数相乘,该如何处理呢?能不能用相同的方法解决?

举个例子  123 * 12 我们应该怎样用上述方法实现呢?

123

* 12定义一个数组为 sum[5] ;

sum[4] = 2 * 3 ;

sum[3] = 2 * 2 ;

sum[2] = 2 * 1 ;

sum[1] = 0 ;

sum[0] = 0 ;

sum[4] = sum[4] + 1 * 3 ;

sum[3] = sum[3] + 1 * 2 ;

sum[2] = sum[2] + 1 * 1 ;

sum[1] = sum[1] + 0 ;

sum[0] = sum[0] + 0 ;

这样就把 sum 数组给确定了;

再运用上面的方法即可解决此题;

思维决定程序的效率 啊 !!!

下面给出相应的代码 :

#include<iostream>
#include<string>
#include<string.h>using namespace std ;int main()      {char s1[1000] , s2[1000] ;while(cin >> s1 >> s2)  {int sum[1001] = {0} ;int len1 = strlen(s1) ;int len2 = strlen(s2) ;for(int i = len2 - 1 ; i >= 0 ; i--)for(int j = len1 - 1 , p = 1000 - (len2 - 1 - i) ; j >= 0 ; j--)sum[p--] += ( (s2[i] - '0') * (s1[j] - '0') ) ;for(int k = 1000 ; k >= 0 ; k--)        {sum[k-1] += sum[k] / 10 ;sum[k] = sum[k] % 10 ;}int start = 0 ;while(start <= 999 && !sum[start])start++ ;while(start <= 1000)cout << sum[start++] ;cout << endl ;}return 0 ;
}

同时可以用JAVA来实现,肯定是方便多了:

import java.util.Scanner;
import java.math.BigInteger;class Main {public static void main(String args[]) {Scanner in = new Scanner(System.in);while(in.hasNext()) {BigInteger a = in.nextBigInteger();BigInteger b = in.nextBigInteger();System.out.println(a.multiply(b).toString());}}
}

转载于:https://www.cnblogs.com/NYNU-ACM/p/4237445.html

大数处理之一(加法和乘法)相关推荐

  1. javascript乘法和加法_js 大整数加法、乘法、除法

    有一定的编程经验的人都知道,当我们对数据操作的时候,若数据过大,计算机将这个大数从十进制的转为二进制的,是没有那个类型的放的了的,因此,我们经常将一个大数转化为字符串来操作.接下来我将演示大整数的加法 ...

  2. c语言加法减法乘法,一元多项式的加法减法乘法c语言描述线性表应用

    一元多项式的加法减法乘法 --(c语言描述)线性表应用 来源:永远的北邮人 vc6.0下调试通过 #include #include #include #include #include #inclu ...

  3. 【组合数学】基本计数原则 ( 加法原则 | 乘法原则 )

    文章目录 1. 加法原则 ( 1 ) 加法原则 ( 不能叠加 的事件才能用 加法原则 | 适用于 分类选取 ) ( 2 ) 乘法法则 ( 相互独立 的 事件 才能用 乘法法则 | 适用于 分步选择 ) ...

  4. 位运算符实现加法和乘法

    文章目录 加法: 乘法: 问题1: 问题2: 加法: #include <iostream> using namespace std; int main() {int x, y;cin & ...

  5. 2015年第六届蓝桥杯 - 省赛 - C/C++大学B组 - F. 加法变乘法

    加法变乘法 我们都知道:1+2+3+ - + 49 = 1225. 现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 比如:1+2+3+-+10 * 11+12+-+27 * 28+29+ ...

  6. 2015蓝桥杯省赛---java---B---6(加法变乘法)

    题目 加法变乘法 思路分析 两个算式进行相减操作 代码实现 package com.atguigu.lanqiao;public class Main { // 简单枚举public static v ...

  7. 使用反向传播算法计算参数的梯度并用python实现加法和乘法节点的反向传播

    使用反向传播算法计算参数的梯度并用python实现加法和乘法节点的反向传播 一.what is 反向传播 二.乘法节点的反向传播 三.加法节点的反向传播 四.加法层和乘法层混合应用 一.what is ...

  8. 输入一行只包含加法和乘法的算式,输出结果

    输入一行只包含加法和乘法的算式,输出结果 #include<iostream> using namespace std; int main() { int x,y,ans=0 ; char ...

  9. java蓝桥杯加法变乘法_蓝桥杯-加法变乘法-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  10. 高等代数 矩阵的运算(第4章)1 加法,数量乘法,矩阵乘法,一些特殊矩阵

    将数域 K K K上所有 s × n s×n s×n矩阵组成的集合记为 M s × n ( K ) M_{s×n}(K) Ms×n​(K);当 s = n s=n s=n,可简记为 M n ( K ) ...

最新文章

  1. 手机网页css字体,CSS深入浅出-动态REM(手机专用)
  2. 002_JSONObject、JSONArray和JsonConfig对象简单使用
  3. 【案例】弱电机房用电负荷计算意义及计算方法
  4. mysql创建只读权限用户_新品速递 | Harbor 修复权限提升漏洞,MySQL Plus 支持密码强度校验以及审计功能...
  5. excel添加列下拉框票价_excel表格下拉表格添加数据-excel2017表格中怎么制作下拉菜单列表框...
  6. Unity代码里的Position和界面上的Position
  7. 国外大学生谈经验:如何在Github参与开源(Open Source on Github: Your First Contribution)
  8. 【编译】StreamInsight应用调优入门(一)——概述
  9. 如何在Exchange 2013中禁用对ECP的外部访问
  10. 【C#】SQL数据库助手类2.0(自用)
  11. mysql工厂模式_工厂模式IDAL详解
  12. 20155313 杨瀚 《网络对抗技术》实验八 Web基础
  13. ITIL 4 讲解:服务目录
  14. ios yylabel 加载html,iOS关于YYLabel的富文本点击事件
  15. [转载]Spring zuul日志配置
  16. CCF201809-3
  17. Win系统速览桌面功能失效 - 解决方案
  18. strncpy和strcpy和memcpy
  19. 跟我学Android之十一 列表和适配器
  20. 江西外语外贸官网 仿写

热门文章

  1. linux 系统基础知识 - fdisk命令
  2. php中空心字体怎么打,php打印一个边长为N的实心和空心菱型的方法
  3. php 验证码小写,PHP实现验证码
  4. Word提供的【样式和格式】设计!
  5. linux版本之redhat9------终端中文软件zhcon0.2.6的安装及使用
  6. 隔空操作之隔空下象棋
  7. redis链表link命令
  8. Bootstrap框架中的字形图标的理解
  9. nagios监控linux nrpe安装
  10. swiftsuspenders Memo