sdut1642Simple Arithmetics(模拟)

链接

发个长长的模拟 这题要注意的地方挺多 -的个数 以及对齐的情况 全都注意好了 大数的加减乘就可以了

  1 #include <iostream>

  2 #include<cstdio>

  3 #include<cstring>

  4 #include<algorithm>

  5 #include<stdlib.h>

  6 #include<vector>

  7 #include<cmath>

  8 #include<queue>

  9 using namespace std;

 10 #define N 510

 11 char s1[N],s2[N];

 12 int s[N][N*2],o[N];

 13 int main()

 14 {

 15     int t,i,j,k1,k2,len;

 16     char c,tc;

 17     scanf("%d",&t);

 18     getchar();

 19     while(t--)

 20     {

 21         len = 0;k1=0;

 22         for(;;)

 23         {

 24            scanf("%c",&c);

 25            if(c=='+'||c=='-'||c=='*')

 26            {

 27                tc = c;

 28                s1[k1] = '\0';

 29                break;

 30            }

 31            s1[k1++] = c;

 32         }

 33         gets(s2);

 34         k2 = strlen(s2);

 35         for(i = 0 ; i <= k2; i++)

 36             for(j = 0 ; j <= k2+k1+10 ; j++)

 37             s[i][j] = 0;

 38         for(i = 0 ; i <= k2 ; i++)

 39         o[i] = 0;

 40         if(tc=='+')

 41         {

 42             i = k1-1,j=k2-1;

 43             int g = 0;

 44             while(i>=0&&j>=0)

 45             {

 46                 int ko = s[1][g]+s1[i--]-'0'+s2[j--]-'0';

 47                 s[1][g+1] = ko/10;

 48                 s[1][g++] = ko%10;

 49             }

 50             while(i>=0)

 51             {

 52                 int ko = s[1][g]+s1[i--]-'0';

 53                 s[1][g+1] = ko/10;

 54                 s[1][g++] = ko%10;

 55             }

 56             while(j>=0)

 57             {

 58                 int ko = s[1][g]+s2[j--]-'0';

 59                 s[1][g+1] = ko/10;

 60                 s[1][g++] = ko%10;

 61             }

 62             g++;

 63             while(s[1][g]==0&&g>0) g--;

 64             int dd = max(g+1,max(k1,k2+1));

 65             for(i = 1; i <= dd-k1 ; i++) printf(" ");

 66             printf("%s\n",s1);

 67             for(i = 1; i <= dd-1-k2 ; i++) printf(" ");

 68             printf("%c%s\n",tc,s2);

 69             for(i = 1; i <= dd-max(k2+1,g+1) ; i++) printf(" ");

 70             for(i = 1; i <= max(k2+1,g+1) ; i++)

 71             printf("-");

 72             puts("");

 73             for(i = 1; i <= dd-1-g ; i++) printf(" ");

 74             for(i = g ; i >= 0 ; i--)

 75             printf("%d",s[1][i]);

 76             puts("");

 77         }

 78         else if(tc=='-')

 79         {

 80             i = k1-1,j=k2-1;

 81             int g = 0;

 82             while(i>=0&&j>=0)

 83             {

 84                 int ko = s[1][g]+s1[i]-s2[j];

 85                 if(ko<0)

 86                 {

 87                     ko+=10;s[1][g+1]--;

 88                 }

 89                 s[1][g++] = ko;i--;j--;

 90             }

 91             while(i>=0)

 92             {

 93                 int ko = s[1][g]+s1[i]-'0';

 94                 if(ko<0)

 95                 {

 96                     ko+=10;s[1][g+1]--;

 97                 }

 98                 s[1][g++] = ko;i--;

 99             }

100             while(s[1][g]==0&&g>0) g--;

101             int dd = max(k1,k2+1);

102             for(i = 1; i <= dd-k1 ; i++) printf(" ");

103             printf("%s\n",s1);

104             for(i = 1; i <= dd-1-k2 ; i++) printf(" ");

105             printf("%c%s\n",tc,s2);

106             for(i = 1; i <= dd-max(k2+1,g+1) ; i++) printf(" ");

107             for(i = 1; i <= max(k2+1,g+1) ; i++) printf("-");

108             puts("");

109             for(i = 1; i <= dd-1-g ; i++) printf(" ");

110             for(i = g ; i >= 0 ; i--)

111             printf("%d",s[1][i]);

112             puts("");

113         }

114         else

115         {

116             for(i = k2-1 ; i >= 0 ; i--)

117             {

118                 o[i] = k2-1-i;

119                 for(j = k1-1 ; j >= 0 ; j--)

120                 {

121                     int ko = s[i][o[i]]+(s2[i]-'0')*(s1[j]-'0');

122                     s[i][o[i]+1] = ko/10;

123                     s[i][o[i]++] = ko%10;

124                 }

125                 while(s[i][o[i]]==0&&o[i]>(k2-1-i)) o[i]--;

126                 for(j = 0 ; j <= max(o[k2],o[i]) ; j++)

127                 {

128                     int ko = s[k2][j]+s[i][j];

129                     s[k2][j] = ko%10;

130                     s[k2][j+1] += ko/10;

131                 }

132                 o[k2] = max(o[k2],o[i]);

133                 if(s[k2][o[k2]+1]) o[k2]++;

134             }

135             while(s[k2][o[k2]]==0&&o[k2]>0) o[k2]--;

136             int dd = max(max(k1,k2+1),o[k2]+1);

137             int td = max(k2+1,o[k2-1]+1);

138             for(i = 1; i <= dd-k1 ; i++) printf(" ");

139             printf("%s\n",s1);

140             for(i = 1; i <= dd-k2-1 ; i++) printf(" ");

141             printf("%c%s\n",tc,s2);

142             for(i = 1; i <= dd-td ; i++) printf(" ");

143             for(i = 1; i <= td ; i++)

144             printf("-");puts("");

145             for(i = k2-1 ; i >= 0 ; i--)

146             {

147                 for(j = 1; j < dd-o[i] ; j++) printf(" ");

148                 for(j = o[i] ; j >= k2-i-1 ; j--) printf("%d",s[i][j]);

149                 puts("");

150             }

151             if(k2>1)

152             {

153                 for(i = 1; i < dd-o[k2] ; i++) printf(" ");

154                 for(i = 1; i <= o[k2]+1 ; i++)

155                 printf("-");puts("");

156                 for(i = 1; i < dd-o[k2] ; i++) printf(" ");

157                 for(i = o[k2] ; i >= 0 ; i--)

158                 printf("%d",s[k2][i]);

159                 puts("");

160             }

161         }

162         puts("");

163     }

164     return 0;

165 }

166  

167 

168 

169 

170 /**************************************

171     Problem id    : SDUT OJ 1642 

172     User name    : shang 

173     Result        : Accepted 

174     Take Memory    : 912K 

175     Take Time    : 160MS 

176     Submit Time    : 2014-02-15 20:53:30  

177 **************************************/
View Code

 

你可能感兴趣的:(simple)