1001WA

时间关系只实现了其中一部分的功能  现在的程序可以实现一个大数的平方

  1 #include <stdio.h>
  2 #include <string.h>
  3 void mypower(int num2);
  4 int findflag();
  5 int myflag = 0;
  6 char num1[200];
  7 int num2;
  8 char a[200] = {0};
  9 char b[200] = {0};
 10 int c[200] = {0};
 11 int d[200] = {0};
 12 int main(void)
 13 {
 14     scanf("%s%d",num1,&num2);
 15     myflag = findflag();
 16     mypower(num2);
 17     return 0;
 18 }
 19 
 20 
 21 void mypower(int num2)
 22 {
 23     int i,j,k,s;
 24     for(s = 1;s < num2;s++)
 25     {
 26         memset(c,0,sizeof(c));
 27         if(b[0] == '\0')
 28         {
 29             for(i = 0;a[i] != '\0';i++)
 30             {
 31                 b[i] = a[i];
 32             }
 33         }
 34         for(i = 0;a[i] != '\0';i++)
 35             for(j =0;b[j] != '\0';j++)
 36             {
 37                 c[i+j] += (a[i] - '0') * (b[j] - '0');
 38 
 39             }
 40         for(k = i+j-1;k > 1;k--)
 41         {
 42             d[k] = (c[k-1] % 10);
 43             c[k-2] += c[k-1] /10;
 44         }
 45         d[0] = (c[0] / 10);
 46         d[1] = (c[0] % 10);
 47         if(d[0] != 0)
 48         {
 49             for(k =0 ;k < i+j;k++)
 50                 b[k] = d[k];
 51         }else
 52         {
 53             for(k =1 ;k < i+j;k++)
 54                 b[k-1] = d[k];
 55         }
 56 
 57     }
 58     myflag *= num2;
 59     if(d[0] != 0)
 60     {
 61         for(s =0;s < myflag;s++)
 62         {
 63             b[i+j-s] = b[i+j-1-s];
 64             b[i+j-1-s] = '.';
 65         }
 66         for(i = 0;i<k+1;i++)
 67         {
 68             if(b[i] == '.')
 69             {
 70                 printf("%c",b[i]);
 71                 continue;
 72             }
 73             printf("%d",b[i]);
 74         }
 75     }else
 76     {
 77         for(s =0;s < myflag;s++)
 78         {
 79             b[i+j-1-s] = b[i+j-2-s];
 80             b[i+j-2-s] = '.';
 81         }
 82         for(i = 0;i<k;i++)
 83         {
 84             if(b[i] == '.')
 85             {
 86                 printf("%c",b[i]);
 87                 continue;
 88             }
 89             printf("%d",b[i]);
 90         }
 91     }
 92 
 93 }
 94 
 95 int findflag()
 96 {
 97     int i,j,flag = 0;
 98     for(i = 0;num1[i] != '\0';i++)
 99     {
100         if(num1[i] == '.')
101         {
102             flag = i;
103             continue;
104         }
105         a[j++] = num1[i];
106     }
107     flag = j - flag;
108     return flag;
109 }

 

posted @ 2016-03-17 14:44  ailx10  阅读(247)  评论(0编辑  收藏  举报