大数加法乘法

大数加法乘法:

  1 /*
  2 2015.4
  3 大数加法,乘法
  4
  5 */
  6 #include <iostream>
  7 #include <string>
  8 #include <vector>
  9
 10 using namespace std;
 11 #define MAX        99
 12 #define MAXM    200
 13
 14 void BigNumAdd()
 15 {
 16     char strA[MAX], strB[MAX];
 17     cout << "输入大数A,B: " << endl;
 18     cin >> strA;
 19     cin >> strB;
 20
 21     int num1[MAX], num2[MAX], k;
 22     int i, j, len1, len2;
 23     for (k = 0; k<MAX; k++)
 24     {
 25         num1[k] = 0;
 26         num2[k] = 0;
 27     }
 28     len1 = strlen(strA);
 29     len2 = strlen(strB);
 30     for (i = len1 - 1, j = 0; i >= 0; i--)     //num[0]保存的是低位
 31         num1[j++] = strA[i] - ‘0‘;
 32     for (i = len2 - 1, j = 0; i >= 0; i--)
 33         num2[j++] = strB[i] - ‘0‘;
 34     for (i = 0; i<MAX; i++)
 35     {
 36         num1[i] += num2[i];
 37         if (num1[i]>9)
 38         {
 39             num1[i] -= 10;
 40             num1[i + 1]++;
 41         }
 42     }
 43
 44     for (i = (MAX - 1); (i >= 0) && num1[i] == 0; i--); //使第一位不为0
 45     if (i >= 0)
 46     for (; i >= 0; i--)
 47         cout << num1[i];
 48     else
 49         cout << "0" << endl;
 50     cout << endl;
 51 }
 52
 53 void BigNumMultiply()
 54 {
 55     int i;
 56     string s;
 57     vector<int> a, b;
 58     cout << "输入大数A,B: " << endl;
 59     cin >> s;
 60
 61     // 容量不足就扩大
 62     a.reserve(s.size());
 63     for (i = 0; i < (int)s.size(); ++i)
 64     {
 65         // 在尾部依次添加
 66         a.push_back(s[i] - ‘0‘);
 67     }
 68     cin >> s;
 69     b.reserve(s.size());
 70     for (i = 0; i < (int)s.size(); ++i)
 71     {
 72         b.push_back(s[i] - ‘0‘);
 73     }
 74
 75     // 存放结果的容器, 初始值为0
 76     vector<int> c(a.size() + b.size() - 1, 0);
 77     int j, k, temp;
 78
 79     for (i = 0; i < (int)a.size(); ++i)
 80     {// 通过该i,j循环,从高位开始相乘,结果同位相加
 81         k = i;
 82         for (j = 0; j < (int)b.size(); ++j)
 83         {
 84             c[k++] += a[i] * b[j];
 85         }
 86     }
 87
 88     for (k = c.size() - 1; k >= 0; --k)
 89     {
 90         if (c[k] > 9)
 91         {
 92             if (k != 0)
 93             {
 94                 c[k - 1] += c[k] / 10;
 95                 c[k] %= 10;
 96             }
 97             else
 98             {
 99                 temp = c[k] / 10;
100                 c[k] %= 10;
101                 // 添加到最前面
102                 c.insert(c.begin(), temp);
103             }
104         }
105     }
106
107     for (i = 0; i < (int)c.size(); ++i)
108     { // 输出
109         cout << c[i];
110     }
111     cout << endl;
112 }
113
114 int main()
115 {
116     cout << "大数加法,乘法:" << endl;
117     cout << "选择: 1——加法  2——乘法  3——退出" << endl;
118     int select = 0;
119
120     while (1)
121     {
122         cout << "输入选择: ";
123         cin >> select;
124         if (select == 1)
125             BigNumAdd();
126         else if (select == 2)
127             BigNumMultiply();
128         else if (select == 3)
129             break;
130         cout << endl;
131     }
132
133     return 0;
134 }
时间: 2024-08-06 09:58:46

大数加法乘法的相关文章

vector、string实现大数加法乘法

理解 vector 是一个容器,是一个数据集,里边装了很多个元素.与数组最大的不同是 vector 可以动态增长. 用 vector 实现大数运算的关键是,以 string 的方式读入一个大数,然后将字串的每一个字符 s[i] 以 int 形式赋给 vector<int> a 中的每一个元素.然后将 a[i] 和 a[j] 加起来(或者乘起来).每两个元素加起来的结果 <= 18,乘起来的结果 <= 81. 用 string 实现大数加法的方法跟 vector 差不多,但是用 st

[acm 1001] c++ 大数加法 乘法 幂

北大的ACM 1001 poj.org/problem?id=1001 代码纯手动编写 - - 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 5 6 class BigNumber 7 { 8 struct BigNumberNode 9 { 10 BigNumberNode():n(0), prev(NULL), next(NULL){} 11 BigNumberNode(int N)

大数加法、乘法

1 #include<iostream> 2 3 #include<stdio.h> 4 5 #include<string.h> 6 7 #define Len 3000//大数的长度 8 9 using namespace std; 10 11 int Input (char n[])//将大数读入的函数 12 13 { 14 15 char s[Len]; 16 17 int i,l; 18 19 20 21 for(i=0; i<Len; i++) n[i

大数加法、减法、乘法

大数四则运算--C++实现 大数处理--c++实现 本课题来自我的c++编程作业,文章利用大数处理类,类名:hugeNumber来对大数(编译器自定义的数值类型无法处理的数)进行四则运算(大数加法.大数减法及大数乘法的运算,除暂时没实现)和按精度四舍五入,自定义科学计数法等.内容广泛涉及运算符重载.字符连接.字符加减和字符乘除等作者原创函数.重要提示:本文涉及的所有函数使用的进制皆为10进制.(备注:已将该博客搬迁至CSDN) 一.解题思路 1 核心思想 文章用hugeNumber类对大数进行操

大数加法、大数乘法

大数加法 hdu1002 #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <cmath> #include <sstream> #include <algorithm> #include <set> #include <map> #include <vector> #i

NI笔试——大数加法

NI笔试: 1.找出字符串第一次出现的字符.用数组建立哈希表,然后再扫描字符串并判断次数是否为1. 2.大数加法,即字符串加法.因为之前写过乘法,就以为是乘法.然后就把乘法写上去了····= = 好了,看一下加法的思路. 要不要太简单,用俩数组,先把字符串每个位转换成数字存到这俩数组里,然后对每一位进行加和. 代码是拿别人的.= = void Add(char s1[],char s2[]) //需要两个字符串参数&&无返回值 { int num1[M],nm2[M]; int i,j;

Hat&#39;s Fibonacci(大数加法+直接暴力)

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1250 hdu1250: Hat's Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9442    Accepted Submission(s): 3096 Problem Description A Fibonacci

C语言 &#183; 大数加法

算法提高 大数加法 时间限制:1.0s   内存限制:256.0MB 问题描述 输入两个正整数a,b,输出a+b的值. 输入格式 两行,第一行a,第二行b.a和b的长度均小于1000位. 输出格式 一行,a+b的值. 样例输入 42 样例输出 6 1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 char a[1001],b[1001]; 6 int s[1001],d[1001]; 7 scanf("

A + B Problem II(大数加法)

一直格式错误,不想改了,没A 1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 #include <stdlib.h> 5 using namespace std; 6 7 int main() 8 { 9 int T,K=0; 10 scanf("%d",&T); 11 char a[1002],b[1002]; 12 int ta[1002],