题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=97&page=show_problem&problem=1047

题目大意 :每输入两个数,输出这两个数的积

题目考点 : 高精度

解题思路: 根据乘法的性质 高精度模拟

解题代码

View Code

 1 // File Name: uva10106.c
 2 // Author: darkdream
 3 // Created Time: 2013年01月25日 星期五 13时18分38秒
 4 
 5 #include<stdio.h>
 6 #include<string.h>
 7 #include<stdlib.h>
 8 #include<time.h>
 9 #include<math.h>
10 
11 char a[600];
12 char b[600];
13 int  c[600];
14 int  d[600];
15 int  e[600];
16 
17 void change(char a[],int b[])
18 {
19     int i ;
20     for (i =0 ;i < strlen(a);  i++)
21       b[strlen(a) - i - 1 ] = a[i] -\'0\';
22 
23 }
24 void mu()
25 {  void print();
26    int i ,j, k ,t ; 
27    for (i =0 ;i < strlen(a) ;i ++)
28    {
29       int s = 0 ;
30      for (j = 0 ; j < strlen(b) ;j++)
31       {
32         t = c[i]*d[j] +s +e[i+j] ;
33         s = t / 10 ;
34         e[i+j] = t % 10 ;
35       }
36      for (j = i+j  ; j< 550 ; j++)
37      {
38        t = e[j] + s;
39        s = t /10 ;
40        e[j] = t %10 ;
41      }
42     
43    }
44 
45 }
46 void print()
47 {
48  int i ; 
49  for (i = 550 ;i >= 0 ;i--)
50      if (e[i] != 0 )
51          break;
52  if (i == -1 )
53      printf("0");
54 
55  for (; i >= 0 ; i--)
56      printf("%d",e[i]);
57  
58  printf("\n");
59 }
60 int main(){ 
61     memset(a,0,sizeof(a));
62     memset(b,0,sizeof(b));
63     memset(c,0,sizeof(c));
64     memset(d,0,sizeof(d));
65     memset(c,0,sizeof(e));
66     while (gets(a))
67    {
68      gets(b);
69      change(a,c);
70      change(b,d);
71      mu();
72      print();
73     memset(a,0,sizeof(a));
74     memset(b,0,sizeof(b));
75     memset(c,0,sizeof(c));
76     memset(d,0,sizeof(d));
77     memset(e,0,sizeof(e));
78   
79    }
80 return 0 ;
81 }

 

 

版权声明:本文为zyue原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zyue/p/2877261.html