wiki oi3117 高精度练习之乘法

题目描述 Description

给出两个正整数A和B,计算A*B的值。保证A和B的位数不超过500位。

输入描述 Input Description

读入两个用空格隔开的正整数

输出描述 Output Description

输出A*B的值

样例输入 Sample Input

3 12

样例输出 Sample Output

36

数据范围及提示 Data Size & Hint

两个正整数的位数不超过500位

代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<math.h>
 4 #include<iostream>
 5 #include<algorithm>
 6 using namespace std;
 7 char a[500],b[500];
 8 int c[502],d[1500];//c存中间数据,d不断累加c得答案
 9 int main()
10 {
11     memset(c,0,sizeof(c));
12     memset(d,0,sizeof(d));
13     cin>>a>>b;
14     int alen=strlen(a)-1;
15     int blen=strlen(b)-1;
16     for(int i=alen; i>=0; i--)
17     {
18         int carry=0,carry1=0,k=0,m=0;//k作c的下标,m作d的下标,carry为c(乘)的进位,carry1为d(累加)的进位
19         for(int j=blen; j>=0; j--)
20         {
21             int cc=(a[i]-‘0‘)*(b[j]-‘0‘)+carry;
22             c[k++]=cc%10;
23             carry=cc/10;
24         }
25         if(carry!=0)c[k++]=carry;//注意乘最后一位后可能还有进位
26 //        for(int n=k-1; n>=0; n--)printf("%d",c[n]);//查看c的中间数据
27 //        printf("\n");
28         m=alen-i;
29         for(int l=0; l<k; l++)
30         {
31             int cc=(d[m]+c[l])+carry1;
32             d[m++]=cc%10;
33             carry1=cc/10;
34         }
35         if(carry1!=0)d[m++]=carry1;//注意累加到最后一位后可能还有进位
36 //        for(int n=m-1; n>=0; n--)printf("%d",d[n]);
37 //        printf("\n");
38     }
39         for(int n=m-1; n>=0; n--)printf("%d",d[n]);
40         printf("\n");
41     return 0;
42 }
时间: 2024-07-29 19:53:06

wiki oi3117 高精度练习之乘法的相关文章

3117 高精度练习之乘法

3117 高精度练习之乘法 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 给出两个正整数A和B,计算A*B的值.保证A和B的位数不超过500位. 输入描述 Input Description 读入两个用空格隔开的正整数 输出描述 Output Description 输出A*B的值 样例输入 Sample Input 3 12 样例输出 Sample Output 36 数据范围及提示 Data Size & Hint

【算法学习笔记】35.高精度 竖式乘法 SJTU OJ 1274

Description 输入a,b 输出a*b的竖式乘法,格式见样例. Sample Input1 11 9 Sample Output1 11 9 -- 99 Sample Input2 10 10 Sample Output2 10 10 --- 100 Sample Input3 101 101 Sample Output3 101 101 ----- 101 101 ----- 10201 Sample Input4 10086 2 Sample Output4 2 10086 ----

POJ 1001 解题报告 高精度大整数乘法模版

题目是POJ1001 Exponentiation  虽然是小数的幂 最终还是转化为大整数的乘法 这道题要考虑的边界情况比较多 做这道题的时候,我分析了 网上的两个解题报告,发现都有错误,说明OJ对于错误的判断还不够严厉. 对边界情况的讨论其实应该是思维严密的表现,当然这并不能表明我写的一点错误都没有,只是多多分析一下还是很有好处的. #include <iostream> #include <fstream> #include <string> #include &l

高精度 加法 减法 乘法 除法 整合

此文为博主原创,转载时请通知博主,并把原文链接放在正文醒目位置. 很久不写高精了,虽说我觉得高精也不会考...还是稍微写一写,防止手生. 两个小时过去了…… 集合了高精+高精.高精-高精.高精*高精.高精/低精. 目前还没发现什么错误,应该可以应付各种情况. 本来想允许它读入负数的,结果发现减法读负数太麻烦了...所以只能读非负数. 下面贴代码. 1 #include<cstdio> 2 #include<algorithm> 3 #include<cmath> 4 #

18.2.28 codevs3115 高精度练习之乘法

题目描述 Description 给出两个正整数A和B,计算A*B的值.保证A和B的位数不超过500位. 输入描述 Input Description 读入两个用空格隔开的正整数 输出描述 Output Description 输出A*B的值 样例输入 Sample Input 3 12 样例输出 Sample Output 36 数据范围及提示 Data Size & Hint 两个正整数的位数不超过500位 1 #include <iostream> 2 #include <

[转]高精度乘法计算

转载自: Daywei 高精度乘法计算 高精度乘法计算基础 1.高精度浮点运算方法 高精度浮点(Floating Point,FP)运算可以转换成整数型运算.由于高精度浮点数可以看成是由整数部分(Integer Part,IP)与小数部分(Decimal Part,DP)的组合,因此其乘法可以看成以下3种运算的组合,即整数x整数(IxI).整数x小数(IxD)和小数x小数(DxD).用表达式表示, 则FP1*FP2=IP1*IP2+(IP1*DP2+IP2*DP1)+DP1*DP2 (1)对于I

高精度之乘法

3117 高精度练习之乘法 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给出两个正整数A和B,计算A*B的值.保证A和B的位数不超过500位. 输入描述 Input Description 读入两个用空格隔开的正整数 输出描述 Output Description 输出A*B的值 样例输入 Sample Input 3 12 样例输出 Sample Output 36 数据范围及提示 Data Size & Hint 两个正

POJ 1625 Censored! (AC自动机 + 高精度 + DP)

题目链接:Censored! 解析:AC自动机 + 高精度 + 简单DP. 字符有可能会超过128,用map映射一下即可. 中间的数太大,得上高精度. 用矩阵快速幂会超时,简单的DP就能解决时间的问题. AC代码: #include <iostream> #include <string.h> #include <algorithm> #include <stdio.h> #include <queue> #include <map>

POJ 1625 Censored! (AC自己主动机 + 高精度 + DP)

题目链接:Censored! 解析:AC自己主动机 + 高精度 + 简单DP. 字符有可能会超过128.用map映射一下就可以. 中间的数太大.得上高精度. 用矩阵高速幂会超时,简单的DP就能解决时间的问题. AC代码: #include <iostream> #include <string.h> #include <algorithm> #include <stdio.h> #include <queue> #include <map&