zoukankan      html  css  js  c++  java
  • 1873 初中的算术

    Noder现在上初三了,正在开始复习中考。他每天要计算型如 (a× a× a× × a)����������������������������na 的式子。 其中 0.0<a<99.999,0<n<26 。

    虽然Noder会计算,但是老是算错,现在他想要你来写一个程序输出正确的结果,以便他核对。

    Input
    单组测试数据。
    第一行有一个实数a和一个整数n,中间用空格分开。 0.0 < a < 99.999,a总是占6位(a长度<=6),0<n<26。
    Output
    输出一个实数表示结果,不要输出前导0,后面多余的0也不要输出,如果是整数不要输出小数点。
    Input示例
    样例输入1
    0.4321 20
    样例输入2
    1.0100 12
    Output示例
    样例输出1
    .00000005148554641076956121994511276767154838481760200726351203835429763013462401
    样例输出2
    1.126825030131969720661201

    AC代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 string multi(string a,string b)//乘法运算 
     5 {
     6     int i,j,arr[200],len=a.length()+b.length();
     7     memset(arr,0,sizeof(arr));
     8     reverse(a.begin(),a.end());//倒序 
     9     reverse(b.begin(),b.end());
    10     for(i=0;i<a.length();i++)
    11     {
    12         for(j=0;j<b.length();j++)
    13         {
    14             arr[i+j]+=(a[i]-'0')*(b[j]-'0');//ab相乘
    15         }
    16     }
    17     for(i=0;i<len;i++)
    18     {
    19         arr[i+1]+=arr[i]/10;
    20         arr[i]%=10;
    21     }//进位 
    22     string ret=string(len,'0');
    23     for(i=0;i<len;i++)
    24         ret[i]+=arr[i];
    25     reverse(ret.begin(),ret.end());
    26     return ret; 
    27 }
    28 
    29 string strpow(string x,int p)
    30 {
    31     string ret="1";
    32     while(p)
    33     {
    34         if(p&1)
    35             ret=multi(ret,x);
    36         x=multi(x,x);
    37         p>>=1; 
    38     }
    39     return ret;
    40 }
    41 
    42 int main()
    43 {
    44     string a;
    45     int n,i,index;
    46     while(cin>>a>>n)
    47     {
    48         index=a.find('.');
    49         if(index==-1)
    50             index=0;
    51         else
    52         {
    53             a=a.substr(0,index)+a.substr(index+1);//去掉小数点 
    54             index=(a.length()-index)*n;//小数点后的位数 
    55         }
    56         a=strpow(a,n);
    57         a=a.substr(0,a.length()-index)+"."+a.substr(a.length()-index);//完整的结果 
    58         for(i=0;i<a.length();i++)
    59         {
    60             if(a[i]!='0')
    61                 break;
    62         }
    63         a=a.substr(i);//除去前导0 
    64         for(i=a.length()-1;i>=0;i--)
    65         {
    66             if(a[i]=='.')
    67             {
    68                 a=a.substr(0,i);
    69                 break;
    70             }
    71             else if(a[i]!='0')
    72             {
    73                 a=a.substr(0,i+1);
    74                 break;
    75             }
    76         }//除去尾0 
    77         cout<<a<<endl;
    78     }
    79 }
  • 相关阅读:
    Verilog非阻塞赋值的仿真/综合问题 (Nonblocking Assignments in Verilog Synthesis)上
    异步FIFO结构及FPGA设计 跨时钟域设计
    FPGA管脚分配需要考虑的因素
    An Introduction to Delta Sigma Converters (DeltaSigma转换器 上篇)
    An Introduction to Delta Sigma Converters (DeltaSigma转换器 下篇)
    中国通信简史 (下)
    谈谈德国大学的电子专业
    中国通信简史 (上)
    Verilog学习笔记
    Verilog非阻塞赋值的仿真/综合问题(Nonblocking Assignments in Verilog Synthesis) 下
  • 原文地址:https://www.cnblogs.com/Kiven5197/p/7222390.html
Copyright © 2011-2022 走看看