标签:
Time Limit: 500MS | Memory Limit: 10000K | |
Total Submissions: 156373 | Accepted: 38086 |
Description
Input
Output
Sample Input
95.123 12 0.4321 20 5.1234 15 6.7592 9 98.999 10 1.0100 12
Sample Output
548815620517731830194541.899025343415715973535967221869852721 .00000005148554641076956121994511276767154838481760200726351203835429763013462401 43992025569.928573701266488041146654993318703707511666295476720493953024 29448126.764121021618164430206909037173276672 90429072743629540498.107596019456651774561044010001 1.126825030131969720661201
Hint
C++
while(cin>>s>>n)
{
...
}
c
while(scanf("%s%d",s,&n)==2) //to see if the scanf read in as many items as you want
/*while(scanf(%s%d",s,&n)!=EOF) //this also work */
{
...
}
Source
1 #include <stdio.h>
2 #include <memory.h>
3
4 #define MAXN 100
5 int a[MAXN], b[MAXN], len_a, len_b;
6
7 /* 模拟算数运算过程,算出乘积 */
8 void multiply(int *a, int *b)
9 {
10 int i, j, len, c[MAXN];
11
12 memset(c, 0, sizeof(c));
13
14 for (i = 0; a[i] != -1; i++)
15 for (j = 0; b[j] != -1; j++)
16 c[i + j] += a[i] * b[j];
17
18 len = i + j - 1;
19
20 for (i = 0; i < len; i++)
21 if (c[i] >= 10) { c[i + 1] += c[i] / 10; c[i] = c[i] % 10;}
22
23 if (c[len] != 0) len_b = len + 1;
24 else len_b = len;
25
26 for (i = 0; i < len_b; i++) b[i] = c[i];
27 }
28
29 void main()
30 {
31 char str[MAXN];
32 int i, j, exp;
33 int st, pt, ed;
34
35 freopen( "input.txt", "r" , stdin);
36
37
38
39 while (scanf("%s %d", str, &exp) != EOF) {
40 memset(a, -1, sizeof(a));
41 memset(b, -1, sizeof(b));
42 len_a = 0;
43 st = pt = ed = -1;
44
45 /*
46 1.st为输入数字的启始位置
47 2.pt为输入数字小数点的位置
48 3.ed为输入数字的结束位置
49 4.此三个中间变量的作用:
50 4.1 去掉开头和结尾的 0
51 4.2 对于小数点的特殊处理
52 4.3 用于计算出乘积后小数点的正确位置
53 */
54 for (i = 0; str[i] != ‘\0‘; i++) {
55 len_a++;
56
57 if (str[i] != ‘0‘ && str[i] != ‘.‘ && st == -1) st = i;
58 if (str[i] != ‘0‘ && str[i] != ‘.‘ || (str[i] != ‘.‘ && pt == -1)) ed = i;
59 if (str[i] == ‘.‘) pt = i;
60 }
61
62 for (i = ed, j = 0; i >= st; i--) {
63 if (str[i] == ‘.‘) continue;
64
65 b[j] = a[j] = str[i] - ‘0‘;
66 j++;
67 }
68
69 len_b = len_a = j;
70 for(i = 1; i < exp; i++) multiply(a, b);
71
72 if (pt < st) {
73 printf(".");
74 for (i = 0; i < (ed - pt) * exp - len_b; i++) printf("0");
75 }
76
77 for (i = len_b - 1; i >= 0; i--) {
78 if (pt > st && pt < ed && i == (ed - pt) * exp - 1) printf(".");
79 printf("%d", b[i]);
80 }
81
82 printf("\n");
83 }
84 }
[POJ] #1002# Exponentiation : 大数乘法
标签:
原文地址:http://www.cnblogs.com/yuanzone/p/5502805.html