zoukankan      html  css  js  c++  java
  • 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] = '';
     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
    ",s1);
     67             for(i = 1; i <= dd-1-k2 ; i++) printf(" ");
     68             printf("%c%s
    ",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
    ",s1);
    104             for(i = 1; i <= dd-1-k2 ; i++) printf(" ");
    105             printf("%c%s
    ",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
    ",s1);
    140             for(i = 1; i <= dd-k2-1 ; i++) printf(" ");
    141             printf("%c%s
    ",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
  • 相关阅读:
    jupyter notebook 不能画图
    tensorflow中reduce_xxx函数
    tensorflow中用正太分布随机初始化网络权重参数 ---tf.random_normal
    将dataframe变量转为tf.constant变量
    dataframe to tensor
    Python-Pandas 如何shuffle(打乱)数据?
    TensorFlow实战(1)
    基本概念——张量、会话、计算图
    天梯赛 L3-003. 社交集群
    蓝桥杯 算法提高 P0101
  • 原文地址:https://www.cnblogs.com/shangyu/p/3550839.html
Copyright © 2011-2022 走看看