hdu 1063 Exponentiation(大数模版题)

求浮点数的幂(0<mi<=25),整数部分为0时,0不输出;整数部分无前缀0,小数部分无后缀0

特殊的样例:

0 :

00.00  12

.000  12 

 

前缀0: 

001.10  12

001  12

 

后缀0: 

0.0100  12 

用大数模版。将浮点数转换整数,记录小数点位置,得到运算结果再将大数转换成字符串处理输出。

附大牛的模版

http://blog.csdn.net/hackbuteer1/article/details/6595881 

http://blog.csdn.net/Hackbuteer1/article/details/6595901 

 

ExpandedBlockStart.gif
  1 #include<iostream>
  2 #include< string>
  3 #include <cstring>
  4 #include<iomanip>
  5 #include<algorithm>
  6  using  namespace std;
  7 
  8  #define MAXN 9999
  9  #define MAXSIZE 10
 10  #define DLEN 4
 11 
 12  class BigNum
 13 {
 14  private:
 15      int a[ 500];     // 可以控制大数的位数
 16       int len;        // 大数长度
 17  public:
 18     BigNum(){ len =  1;memset(a, 0, sizeof(a)); }    // 构造函数
 19      BigNum( const  int);        // 将一个int类型的变量转化为大数
 20      BigNum( const  char*);      // 将一个字符串类型的变量转化为大数
 21      BigNum( const BigNum &);   // 拷贝构造函数
 22      BigNum & operator=( const BigNum &);    // 重载赋值运算符,大数之间进行赋值运算
 23 
 24     friend istream&  operator>>(istream&,  BigNum&);    // 重载输入运算符
 25      friend ostream&  operator<<(ostream&,  BigNum&);    // 重载输出运算符
 26 
 27     BigNum  operator+( const BigNum &)  const;    // 重载加法运算符,两个大数之间的相加运算
 28      BigNum  operator-( const BigNum &)  const;    // 重载减法运算符,两个大数之间的相减运算
 29      BigNum  operator*( const BigNum &)  const;    // 重载乘法运算符,两个大数之间的相乘运算
 30      BigNum  operator/( const  int   &)  const;     // 重载除法运算符,大数对一个整数进行相除运算
 31 
 32     BigNum  operator^( const  int  &)  const;     // 大数的n次方运算
 33       int     operator%( const  int  &)  const;     // 大数对一个int类型的变量进行取模运算
 34       bool    operator>( const BigNum & T) const;    // 大数和另一个大数的大小比较
 35       bool    operator>( const  int & t) const;       // 大数和一个int类型的变量的大小比较
 36 
 37      void print();        // 输出大数
 38       char* tochar( char*);
 39 };
 40 BigNum::BigNum( const  int b)      // 将一个int类型的变量转化为大数
 41  {
 42      int c,d = b;
 43     len =  0;
 44     memset(a, 0, sizeof(a));
 45      while(d > MAXN)
 46     {
 47         c = d - (d / (MAXN +  1)) * (MAXN +  1);
 48         d = d / (MAXN +  1);
 49         a[len++] = c;
 50     }
 51     a[len++] = d;
 52 }
 53 BigNum::BigNum( const  char*s)      // 将一个字符串类型的变量转化为大数
 54  {
 55      int t,k,index,l,i;
 56     memset(a, 0, sizeof(a));
 57     l=strlen(s);
 58     len=l/DLEN;
 59      if(l%DLEN)
 60         len++;
 61     index= 0;
 62      for(i=l- 1;i>= 0;i-=DLEN)
 63     {
 64         t= 0;
 65         k=i-DLEN+ 1;
 66          if(k< 0)
 67             k= 0;
 68          for( int j=k;j<=i;j++)
 69             t=t* 10+s[j]- ' 0 ';
 70         a[index++]=t;
 71     }
 72 }
 73 BigNum::BigNum( const BigNum & T) : len(T.len)   // 拷贝构造函数
 74  {
 75      int i;
 76     memset(a, 0, sizeof(a));
 77      for(i =  0 ; i < len ; i++)
 78         a[i] = T.a[i];
 79 }
 80 BigNum & BigNum:: operator=( const BigNum & n)    // 重载赋值运算符,大数之间进行赋值运算
 81  {
 82      int i;
 83     len = n.len;
 84     memset(a, 0, sizeof(a));
 85      for(i =  0 ; i < len ; i++)
 86         a[i] = n.a[i];
 87      return * this;
 88 }
 89 istream&  operator>>(istream &  in,  BigNum & b)    // 重载输入运算符
 90  {
 91      char ch[MAXSIZE* 4];
 92      int i = - 1;
 93      in>>ch;
 94      int l=strlen(ch);
 95      int count= 0,sum= 0;
 96      for(i=l- 1;i>= 0;)
 97     {
 98         sum =  0;
 99          int t= 1;
100          for( int j= 0;j< 4&&i>= 0;j++,i--,t*= 10)
101         {
102             sum+=(ch[i]- ' 0 ')*t;
103         }
104         b.a[count]=sum;
105         count++;
106     }
107     b.len =count++;
108      return  in;
109 
110 }
111 ostream&  operator<<(ostream&  out,  BigNum& b)    // 重载输出运算符
112  {
113      int i;
114     cout << b.a[b.len -  1];
115      for(i = b.len -  2 ; i >=  0 ; i--)
116     {
117         cout.width(DLEN);
118         cout.fill( ' 0 ');
119         cout << b.a[i];
120     }
121      return  out;
122 }
123 
124 BigNum BigNum:: operator+( const BigNum & T)  const    // 两个大数之间的相加运算
125  {
126     BigNum t(* this);
127      int i,big;       // 位数
128      big = T.len > len ? T.len : len;
129      for(i =  0 ; i < big ; i++)
130     {
131         t.a[i] +=T.a[i];
132          if(t.a[i] > MAXN)
133         {
134             t.a[i +  1]++;
135             t.a[i] -=MAXN+ 1;
136         }
137     }
138      if(t.a[big] !=  0)
139         t.len = big +  1;
140      else
141         t.len = big;
142      return t;
143 }
144 BigNum BigNum:: operator-( const BigNum & T)  const    // 两个大数之间的相减运算
145  {
146      int i,j,big;
147      bool flag;
148     BigNum t1,t2;
149      if(* this>T)
150     {
151         t1=* this;
152         t2=T;
153         flag= 0;
154     }
155      else
156     {
157         t1=T;
158         t2=* this;
159         flag= 1;
160     }
161     big=t1.len;
162      for(i =  0 ; i < big ; i++)
163     {
164          if(t1.a[i] < t2.a[i])
165         {
166             j = i +  1;
167              while(t1.a[j] ==  0)
168                 j++;
169             t1.a[j--]--;
170              while(j > i)
171                 t1.a[j--] += MAXN;
172             t1.a[i] += MAXN +  1 - t2.a[i];
173         }
174          else
175             t1.a[i] -= t2.a[i];
176     }
177     t1.len = big;
178      while(t1.a[len -  1] ==  0 && t1.len >  1)
179     {
180         t1.len--;
181         big--;
182     }
183      if(flag)
184         t1.a[big- 1]= 0-t1.a[big- 1];
185      return t1;
186 }
187 
188 BigNum BigNum:: operator*( const BigNum & T)  const    // 两个大数之间的相乘运算
189  {
190     BigNum ret;
191      int i,j,up;
192      int temp,temp1;
193      for(i =  0 ; i < len ; i++)
194     {
195         up =  0;
196          for(j =  0 ; j < T.len ; j++)
197         {
198             temp = a[i] * T.a[j] + ret.a[i + j] + up;
199              if(temp > MAXN)
200             {
201                 temp1 = temp - temp / (MAXN +  1) * (MAXN +  1);
202                 up = temp / (MAXN +  1);
203                 ret.a[i + j] = temp1;
204             }
205              else
206             {
207                 up =  0;
208                 ret.a[i + j] = temp;
209             }
210         }
211          if(up !=  0)
212             ret.a[i + j] = up;
213     }
214     ret.len = i + j;
215      while(ret.a[ret.len -  1] ==  0 && ret.len >  1)
216         ret.len--;
217      return ret;
218 }
219 BigNum BigNum:: operator/( const  int & b)  const    // 大数对一个整数进行相除运算
220  {
221     BigNum ret;
222      int i,down =  0;
223      for(i = len -  1 ; i >=  0 ; i--)
224     {
225         ret.a[i] = (a[i] + down * (MAXN +  1)) / b;
226         down = a[i] + down * (MAXN +  1) - ret.a[i] * b;
227     }
228     ret.len = len;
229      while(ret.a[ret.len -  1] ==  0 && ret.len >  1)
230         ret.len--;
231      return ret;
232 }
233  int BigNum:: operator %( const  int & b)  const     // 大数对一个int类型的变量进行取模运算
234  {
235      int i,d= 0;
236      for (i = len- 1; i>= 0; i--)
237     {
238         d = ((d * (MAXN+ 1))% b + a[i])% b;
239     }
240      return d;
241 }
242 BigNum BigNum:: operator^( const  int & n)  const     // 大数的n次方运算
243  {
244     BigNum t,ret( 1);
245      int i;
246      if(n< 0)
247         exit(- 1);
248      if(n== 0)
249          return  1;
250      if(n== 1)
251          return * this;
252      int m=n;
253      while(m> 1)
254     {
255         t=* this;
256          for( i= 1;i<< 1<=m;i<<= 1)
257         {
258             t=t*t;
259         }
260         m-=i;
261         ret=ret*t;
262          if(m== 1)
263             ret=ret*(* this);
264     }
265      return ret;
266 }
267  bool BigNum:: operator>( const BigNum & T)  const    // 大数和另一个大数的大小比较
268  {
269      int ln;
270      if(len > T.len)
271          return  true;
272      else  if(len == T.len)
273     {
274         ln = len -  1;
275          while(a[ln] == T.a[ln] && ln >=  0)
276             ln--;
277          if(ln >=  0 && a[ln] > T.a[ln])
278              return  true;
279          else
280              return  false;
281     }
282      else
283          return  false;
284 }
285  bool BigNum:: operator >( const  int & t)  const     // 大数和一个int类型的变量的大小比较
286  {
287     BigNum b(t);
288      return * this>b;
289 }
290 
291  void BigNum::print()     // 输出大数
292  {
293      int i;
294     cout << a[len -  1];
295      for(i = len -  2 ; i >=  0 ; i--)
296     {
297         cout.width(DLEN);
298         cout.fill( ' 0 ');
299         cout << a[i];
300     }
301     cout << endl;
302 }
303 
304  char* BigNum::tochar( char *ss)
305 {
306      int indexx =  0;
307      for( int i= 0; i<len- 1; i++)
308     {
309          int tmp = a[i], tmp_len =  0;
310          while(tmp> 0)
311         {
312             ss[indexx++] = tmp %  10 +  ' 0 ';
313             tmp_len++;
314             tmp /=  10;
315         }
316          for( int i=tmp_len+ 1;i<= 4; i++)
317             ss[indexx++] =  ' 0 ';
318     }
319      int last = a[len- 1];
320      while(last> 0)
321     {
322         ss[indexx++] = last %  10 +  ' 0 ';
323         last /=  10;
324     }
325     ss[indexx] =  ' \0 ';
326      return ss;
327 }
View Code 
ExpandedBlockStart.gif
 1  int main( void)
 2 {
 3      char str[ 10],s[ 10],*ans;
 4     ans = ( char*)calloc( 2000, sizeof( char));
 5      int len_str, len_s, point, mi, len_ans;
 6      while(cin >> str >> mi)
 7     {
 8          // =======
 9           // cout << "str: " << str << endl;
10          point = - 1, len_s =  0;
11         len_str = strlen(str);
12          int prezero =  0; // 前缀0
13           while(str[prezero]== ' 0 ')
14             prezero++;
15          for( int i=prezero; i<len_str; i++)
16         {
17              if(str[i]== ' . ')
18             {
19                 point = len_str - i -  1;
20                  continue;
21             }
22             s[len_s++] = str[i];
23         }
24         s[len_s] =  ' \0 ';
25          // =======
26           // cout << "s" << s << "}" << endl;
27           if(point==- 1)
28             point =  0;
29          else
30         {
31              while(str[len_str- 1]== ' 0 ')
32             {
33                 point--;
34                 len_s--;
35                 len_str--;
36             }
37             s[len_s] =  ' \0 ';
38         }
39          // =======
40          //  cout << "s" << s << "}" << endl;
41           int zero_test =  0;
42          for( int i= 0; i<len_s; i++)
43             zero_test += s[i]- ' 0 ';
44          if(zero_test== 0)
45             cout <<  " 0 " << endl;
46          else{
47         point*=mi;
48          // cout << "point:" << point << endl;
49          BigNum b(s);
50         b = b^mi;
51         ans = b.tochar(ans);
52          // =======
53           // cout << "ans: " << ans << endl;
54          len_ans = strlen(ans);
55          if(point >= len_ans)
56         {
57             cout <<  " . " <<  string(point-len_ans,  ' 0 ');
58              for( int i=len_ans- 1; i>= 0; i--)
59                 cout << ans[i];
60         }
61          else
62         {
63              for( int i=len_ans- 1; i>point- 1; i--)
64                 cout << ans[i];
65              if(point> 0)
66                 cout <<  " . ";
67              for( int i=point- 1; i>= 0; i--)
68                 cout << ans[i];
69         }
70         cout << endl;
71        }
72     }
73      return  0;
74 }
View Code 

转载于:https://www.cnblogs.com/byluoluo/p/3437969.html

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.zip深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值