uva10106 大数乘
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=97&page=show_problem&problem=1047
题目大意 :每输入两个数,输出这两个数的积
题目考点 : 高精度
解题思路: 根据乘法的性质 高精度模拟
解题代码
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 }