poj 2389.Bull Math 解题报告

题目链接:http://poj.org/problem?id=2389

题目意思:就是大整数乘法。

  题目中说每个整数不超过 40 位,是错的!!!要开大点,这里我开到100.

  其实大整数乘法还是第一次写 = =.......大整数加法写得比较多。百练也有一条是大整数乘法,链接如下:http://bailian.openjudge.cn/practice/2980/

  一步一步模拟即可,代码就是按这个来写的。

  以 835 * 49 为例(亲爱的读者,允许我截图吧)

简直就是神奇呀~~~~~

   

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 using namespace std;
 6
 7 const int maxn = 100 + 10;
 8 char ca[maxn], cb[maxn];
 9 int ia[maxn], ib[maxn];
10 int res[2*maxn+10];
11
12 int main()
13 {
14     #ifndef ONLINE_JUDGE
15         freopen("in.txt", "r", stdin);
16     #endif // ONLINE_JUDGE
17     while (scanf("%s%s", ca, cb) != EOF)
18     {
19         int l1 = strlen(ca);
20         for (int i = 0; i < l1; i++)
21             ia[l1-i-1] = ca[i] - ‘0‘;
22         int l2 = strlen(cb);
23         for (int i = 0; i < l2; i++)
24             ib[l2-i-1] = cb[i] - ‘0‘;
25         memset(res, 0, sizeof(res));
26         for (int i = 0; i < l1; i++)
27         {
28             for (int j = 0; j < l2; j++)
29                 res[i+j] += ia[i] * ib[j];
30         }
31         // 处理进位问题
32         for (int i = 0; i < l1+l2; i++)
33         {
34             if (res[i] >= 10)
35             {
36                 res[i+1] += res[i] / 10;
37                 res[i] %= 10;
38             }
39         }
40         bool flag = false;
41         for (int i = maxn; i >= 0; i--)
42         {
43             if (flag)
44                 printf("%d", res[i]);
45             else if (res[i])
46             {
47                 printf("%d", res[i]);
48                 flag = true;
49             }
50         }
51         if (!flag)
52             printf("0");
53         printf("\n");
54     }
55     return 0;
56 }

  

时间: 2024-11-04 14:15:50

poj 2389.Bull Math 解题报告的相关文章

POJ 2389 Bull Math(大数乘法,还是Java好)

Bull Math Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14252   Accepted: 7350 Description Bulls are so much better at math than the cows. They can multiply huge integers together and get perfectly precise answers ... or so they say. F

POJ 2389 Bull Math(大数相乘)

Bull Math Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13920   Accepted: 7192 Description Bulls are so much better at math than the cows. They can multiply huge integers together and get perfectly precise answers ... or so they say. F

POJ 2389 Bull Math

Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13500   Accepted: 6968 Description Bulls are so much better at math than the cows. They can multiply huge integers together and get perfectly precise answers ... or so they say. Farmer John

poj 3020 Antenna Placement 解题报告

题目链接:http://poj.org/problem?id=3020 题目意思:首先,请忽略那幅有可能误导他人成分的截图(可能我悟性差,反正有一点点误导我了). 给出一幅 h * w 的图,  “ * ” 表示 point of interest,“ o ” 忽略之.你可以对 " * " (假设这个 “* ”的坐标是 (i, j))画圈,每个圈只能把它四周的某一个点括住(或者是上面(i-1, j) or 下面(i+1, j) or 左边(i, j-1)  or 右边(i, j+1))

poj 1789 Truck History 解题报告

题目链接:http://poj.org/problem?id=1789 题目意思:给出 N 行,每行7个字符你,统计所有的 行 与 行 之间的差值(就是相同位置下字母不相同),一个位置不相同就为1,依次累加.问最终的差值最少是多少. 额.....题意我是没看懂啦= =......看懂之后,就转化为最小生成树来做了.这是一个完全图,即每条边与除它之外的所有边都连通.边与边的权值是通过这个差值来算出来的. 1 #include <iostream> 2 #include <cstdio>

poj 1860 Currency Exchange 解题报告

题目链接:http://poj.org/problem?id=1860 题目意思:给出 N 种 currency, M种兑换方式,Nick 拥有的的currency 编号S 以及他的具体的currency(V).M 种兑换方式中每种用6个数描述: A, B, Rab, Cab, Rba, Cba.其中,Rab: 货币A 兑换 货币B 的汇率为Rab,佣金为Cab.Rba:货币B 兑换 货币 A 的汇率,佣金为Cba.假设含有的A货币是x,那么如果兑换成B,得到的货币B 就是:(x-Cab) *

poj 2531 Network Saboteur 解题报告

题目链接:http://poj.org/problem?id=2531 题目意思:将 n 个点分成两个部分A和B(也就是两个子集啦), 使得子集和最大(一定很难理解吧,呵呵).举个例子吧,对于样例,最佳的分法就是把点2分为一个子集,另一个子集理所当然就是1.3了. 2-1 的权值是50,2-3的权值是40,那么最大就是50+40 = 90了. 首先dfs的话,我不太会做啦.看了队长的用了状态压缩来做,一下子觉得好神奇!!!! 可能第一次接触,理解得不是太深刻,先留着吧.就觉得好神奇,好神奇...

poj 3368 Frequent values 解题报告

题目链接:http://poj.org/problem?id=3368 题目意思:给出一段 n 个数的序列你,对于区间 [l, r] 的询问,找出 出现频率最高的数的次数.考虑到序列中的数是非递减的,也就是相同的数会连续不间断地在一起,于是就才有了代码中这个部分来预判了: if (s > t)        printf("%d\n", ans); 这个人写RMQ 写得不错:http://dongxicheng.org/structure/lca-rmq/ 这题就是套模板的,纪念

poj 1325 Machine Schedule 解题报告

题目链接:http://poj.org/problem?id=1325 题目意思:有 k 个作业,机器A有 n 个模式:0 ~ n-1,机器B 有 m 个模式:0~ m-1.每一个作业能运行在 A 的 某一个模式(假设为 i (0 <= i <= n-1 ) )或 B 的某一个模式下(j (0 <= j <= m-1)).多个作业可以同时运行在 A 的某一个 模式下,当然 B 也如此.每对A 或 B 转换一次模式,就要重启一次 A 或者 B,你需要选择A 或 B 的一些模式,使得所