zoukankan      html  css  js  c++  java
  • POJ 1001

      前几天跟Clavichord比赛……比的就是POJ 1001.虽然是水题吧,但是参加了几届NOIP之后高精度一点也不会写了……

      晚自习第三节“比赛”开始,比谁先写出这个题。题目是给若干组实数a、b,求a^b……

      我刚打开Lazarus,Clavichord猥琐地说他已经写了一半了……不公平啊,逼迫他删的只剩下头文件……得,我也耍赖……我关了Lazarus直接打开Eclipse……

      解法①:直接上Java……

    import java.util.*;
    import java.math.*;
    
    public class Main {
    	public static void main(String[] args) {
    		Scanner scanner=new Scanner(System.in);
    		BigDecimal a;
    		BigDecimal ans;
    		long b;
    		while (scanner.hasNext()) {
    			a=scanner.nextBigDecimal();
    			b=scanner.nextLong();
    			ans=a;
    		    for (int i=2;i<=b;i++)
    		    	ans=ans.multiply(a);
    		    String str=new String(ans.toPlainString());
    		    int len=str.length()-1;
    		    while (str.charAt(len)=='0') len--;
    		    if (str.charAt(len)=='.') len--;
    		    int p=0;
    		    while (str.charAt(p)=='0') p++;
    		    for (int i=p;i<=len;i++)
    		    	System.out.print(str.charAt(i));
    		    System.out.println();
    			
    		}
    	}
    }
    

    “我强烈鄙视高精度写Java的……”

    好吧好吧,我写Pascal行了吧……

    {$M 10000000}
    program POJ_1001;
    var s,ans:ansistring;
        c:char;
        n,i:longint;
    
    
    function multiply(s,q:ansistring):ansistring;
    var a,b,c:array[1..110000]of integer;
        len,len1,len2,float,i,j:longint;
        ans:ansistring;
    begin
      fillchar(c,sizeof(c),0);
      multiply:='';
      float:=(length(s)-pos('.',s))+(length(q)-pos('.',q));
      delete(s,pos('.',s),1);delete(q,pos('.',q),1);
      ans:='';
      for i:=1 to length(s) do a[length(s)-i+1]:=ord(s[i])-ord('0');
      for i:=1 to length(q) do b[length(q)-i+1]:=ord(q[i])-ord('0');
      len1:=length(s);
      len2:=length(q);
      for i:=1 to len1 do
        for j:=1 to len2 do
          begin
            c[i+j-1]:=c[i+j-1]+a[i]*b[j];
            c[i+j]:=c[i+j]+c[i+j-1] div 10;
            c[i+j-1]:=c[i+j-1] mod 10;
          end;
      len:=len1+len2+1;
      while c[len]>0 do
        begin
          c[len+1]:=c[len] div 10;
          c[len]:=c[len] mod 10;
          inc(len);
        end;
      for i:=len downto 1 do ans:=ans+chr(c[i]+ord('0'));
      insert('.',ans,len-float+1);
      exit(ans);
    end;
    
    begin
      while not eof() do
        begin
          s:='';
          read(c);
          while c<>' ' do
            begin
              s:=s+c;
              read(c);
            end;
          readln(n);
          ans:=s;
          for i:=2 to n do
            ans:=multiply(ans,s);
          while ans[length(ans)]='0' do delete(ans,length(ans),1);
          while ans[1]='0' do delete(ans,1,1);
          if ans[length(ans)]='.' then delete(ans,length(ans),1);
          writeln(ans);
        end;
    end.
    

    最后还是悲剧地输了……输在忘了处理100.00的情况,我应该把小数点一起删掉的……

  • 相关阅读:
    Golang Gin使用模板及框架下返回Json
    Golang Web下返回HTML内容处理方法
    Golang net.http和Gin框架下的模板--View调用后台方法 --view接收后台数据的运用 及 嵌套模板和继承模板的使用
    设置oracle编辑的快捷方式
    oracle中的异常处理方法
    游标的使用
    网站登录界面包数据库异常
    在PLSQL中不能使用中文作为查询条件查询数据
    oracle错误一览表
    oracle导入时报错
  • 原文地址:https://www.cnblogs.com/Delostik/p/1972248.html
Copyright © 2011-2022 走看看