• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 40, 文章 - 0, 評論 - 19, 引用 - 0
            數(shù)據(jù)加載中……

            PKU 1001 Exponentiation

            http://acm.pku.edu.cn/JudgeOnline/problem?id=1001

            求高精度冪的題目,題目的難度在于處理如同 .00010 的輸入

            和輸出的前導后導零的問題,還有小數(shù)點的位置可能在處理輸入時候被影響
            寫了好久代碼,但是同學用JAVA只需要一會就能搞定了,郁悶...
            附上AC代碼:

              1Source Code
              2
              3Problem: 1001  User: hongtaozhy 
              4Memory: 304K  Time: 0MS 
              5Language: G++  Result: Accepted 
              6
              7Source Code 
              8#include<stdio.h>
              9#include<string.h>
             10#include<math.h>
             11void reverse(char*str);
             12void multi(char*num1,char*num2,char*result);
             13    char a[100]; 
             14    char str[100];
             15    char sum[200];
             16    char tem[200];
             17    char tem2[100];
             18int main(){
             19    int flag;
             20    int n; 
             21    int key;
             22    int flag2;
             23    int kk;
             24//freopen("a.txt","r",stdin);
             25//freopen("a2.txt","w",stdout);
             26    while(scanf("%s%d",a,&n)==2){
             27    memset(str,0,sizeof(str));
             28    kk=0;
             29    flag=-1;
             30    flag2=6;
             31    int g=0;
             32    int j=0;
             33    int t = 0;
             34    if(a[0]=='.'){ g=1;}
             35    for(int i = 0 ; i < 6 ; i++){
             36    if(a[i]=='0'&&kk==0)continue;    
             37    kk=1;
             38    a[t++]=a[i];
             39    }

             40    a[t]='\0';
             41    
             42    if(a[0]=='.'{
             43    for(int i =strlen(a);i>=0;i--)
             44    a[i+1]=a[i];  
             45    a[0]='0';
             46    }
            {
             47    int i;
             48    for(i=0 ; i < strlen(a);i++ )
             49    if(a[i]=='.'break;
             50    if(i==strlen(a)) {a[i]='.';a[i+1]='0';a[i+2]='\0';}}

             51
             52    for(int i=0;i<strlen(a);i++)
             53    if(a[i]=='.')  {  flag=i;kk=1;}
             54    else {
             55    if(a[i]=='0'&&flag!=-1&&flag2==strlen(a)) flag2=i;
             56    if(a[i]!='0'&&flag!=-1) flag2=strlen(a);
             57    str[j++]=a[i];      
             58    }
             
             59    
             60    int ne=strlen(a)-flag-1;
             61    for(j = strlen(str)-1 ; j >= 0 ; j-- ){
             62    if(str[j] == '0'&&ne--){
             63    str[j]='\0';
             64    }
                
             65    else  break;
             66    }

             67    flag=flag2-flag-1;
             68    //接入結(jié)束
             69    if(g==1)
             70    printf(".");
             71    memset(sum,0,sizeof(sum));
             72    memset(tem,0,sizeof(tem));
             73    memset(tem2,0,sizeof(tem2));
             74    key=0;
             75    sum[0]='1';
             76    sum[1]='\0';    
             77    for(int i=0; i < n ; i++)
             78    {     
             79          if(key!=1)
             80          key=1;
             81          strcpy(tem2,str);
             82          multi(sum,tem2,tem);
             83          memset(sum,0,sizeof(sum));
             84          memset(tem2,0,sizeof(tem2));
             85          }
                 
             86          else{
             87          strcpy(tem2,str);
             88          key=0;
             89          multi(tem,tem2,sum);
             90          memset(tem,0,sizeof(tem));
             91          memset(tem2,0,sizeof(tem2));
             92          }

             93    }
             
             94    if(key==1)
             95                    for(int i = 0 ; tem[i] != '\0' ; i++ ){
             96                    if( tem[i] == '0' && i == 0 ) continue;
             97                   if(i==strlen(tem)-(flag*n)&&g!=1) printf(".");
             98                  printf("%c",tem[i]);
             99                    }

            100    }

            101    else{          
            102                    for(int i = 0 ; sum[i] != '\0' ; i++ ){
            103                    if( sum[i] == '0' && i == 0 ) continue;
            104               if(i==strlen(sum)-(flag*n)&&g!=1) printf(".");
            105                  printf("%c",sum[i]);
            106                    }

            107    }

            108    printf("\n");       
            109    }

            110return 0;
            111}

            112void multi(char*num1,char*num2,char*result)
            113{
            114    int i,j,len1,len2,len;
            115
            116    len1=strlen(num1);
            117    len2=strlen(num2);
            118    reverse(num2);
            119    reverse(num1);
            120
            121    for (i=0;i<len1;i++)
            122        num1[i] -= '0';
            123    for (i=0;i<len2;i++)
            124        num2[i] -= '0';
            125
            126    for (i=0;i<len2;i++)
            127        for (j=0;j<len1;j++)
            128        {
            129            len=i+j;
            130            result[len] += num2[i]*num1[j];
            131            result[len+1+= result[len]/10;
            132            result[len] %= 10;
            133        }

            134    len=len1+len2-1;
            135    for (i=0;i<len;i++)
            136        result[i] += '0';
            137    if (result[len]) result[len] += '0';
            138    reverse(result);
            139}

            140
            141void reverse(char*str)
            142{
            143    int i;
            144    char c;
            145    for (i=0;i<strlen(str)/2;i++)
            146    {
            147        c=str[i];
            148        str[i]=str[strlen(str)-i-1];
            149        str[strlen(str)-i-1]=c;
            150    }

            151}

            152
            153
            154

            posted on 2008-07-16 00:43 hadn't 閱讀(1655) 評論(4)  編輯 收藏 引用

            評論

            # re: PKU 1001 Exponentiation  回復  更多評論   

            膜拜一下。。。。。
            2008-07-19 12:34 | gong

            # re: PKU 1001 Exponentiation  回復  更多評論   

            - -||@gong
            2008-07-19 12:36 | hadn't

            # re: PKU 1001 Exponentiation  回復  更多評論   

            so 長的代碼,還是沒有動手寫高精乘,害怕,呵呵
            2008-07-20 10:33 | 未央

            # re: PKU 1001 Exponentiation  回復  更多評論   

            求高手指導,我改了N遍,還是得到wrong answer!

            這里貼不下,代碼詳見:
            http://poj.org/showmessage?message_id=169793

            或者把意見發(fā)到我郵箱(huowaa@gmail.com)也行,非常感謝
            2012-02-26 06:47 | huowaa
            久久亚洲天堂| 国产精品一区二区久久不卡| 久久免费香蕉视频| 无码人妻久久一区二区三区| 97久久香蕉国产线看观看| 国产高潮久久免费观看| 久久精品成人欧美大片| 久久电影网2021| 一本色道久久88精品综合 | 国产福利电影一区二区三区,免费久久久久久久精 | 国产三级久久久精品麻豆三级| 久久久一本精品99久久精品66| 色综合色天天久久婷婷基地| 伊人久久五月天| 国产欧美久久久精品| 中文精品久久久久人妻不卡| 久久久国产精品| 国产精品久久久久9999高清| 亚洲精品乱码久久久久久蜜桃图片 | 99久久精品国产免看国产一区| 亚洲精品国产第一综合99久久 | 色天使久久综合网天天| 久久精品这里热有精品| 久久久亚洲欧洲日产国码aⅴ| 欧美激情精品久久久久久久九九九| 久久精品亚洲精品国产色婷| 久久天天躁夜夜躁狠狠躁2022| 久久人人爽人人澡人人高潮AV| 伊人色综合久久天天| 国内精品伊人久久久久av一坑| 亚洲色大成网站www久久九| 亚洲第一永久AV网站久久精品男人的天堂AV| 久久亚洲国产欧洲精品一| 久久精品国产亚洲AV无码偷窥| 久久精品国产免费观看| 欧美日韩精品久久久久| 亚洲精品无码久久不卡| 免费无码国产欧美久久18| 中文精品久久久久人妻| 久久久久久久免费视频| 久久99热这里只有精品66|