• <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, 評(píng)論 - 19, 引用 - 0
            數(shù)據(jù)加載中……

            PKU 1001 Exponentiation

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

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

            和輸出的前導(dǎo)后導(dǎo)零的問(wèn)題,還有小數(shù)點(diǎn)的位置可能在處理輸入時(shí)候被影響
            寫(xiě)了好久代碼,但是同學(xué)用JAVA只需要一會(huì)就能搞定了,郁悶...
            附上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 閱讀(1662) 評(píng)論(4)  編輯 收藏 引用

            評(píng)論

            # re: PKU 1001 Exponentiation  回復(fù)  更多評(píng)論   

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

            # re: PKU 1001 Exponentiation  回復(fù)  更多評(píng)論   

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

            # re: PKU 1001 Exponentiation  回復(fù)  更多評(píng)論   

            so 長(zhǎng)的代碼,還是沒(méi)有動(dòng)手寫(xiě)高精乘,害怕,呵呵
            2008-07-20 10:33 | 未央

            # re: PKU 1001 Exponentiation  回復(fù)  更多評(píng)論   

            求高手指導(dǎo),我改了N遍,還是得到wrong answer!

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

            或者把意見(jiàn)發(fā)到我郵箱(huowaa@gmail.com)也行,非常感謝
            2012-02-26 06:47 | huowaa

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久久久婷婷| 成人国内精品久久久久影院| 国产精品久久波多野结衣| 一本色道久久综合| 久久久久九国产精品| 精品无码久久久久久久久久| 中文字幕亚洲综合久久| 欧美一区二区精品久久| 久久99中文字幕久久| 久久99免费视频| 97精品国产97久久久久久免费| 国产精品久久久久久| 热久久这里只有精品| 久久精品国产91久久麻豆自制| 久久综合久久综合久久| 丁香五月综合久久激情| 少妇被又大又粗又爽毛片久久黑人| 免费一级欧美大片久久网| 无码任你躁久久久久久| 日韩久久久久久中文人妻 | 久久免费线看线看| 国产叼嘿久久精品久久| 香港aa三级久久三级老师2021国产三级精品三级在 | 久久青青草原精品国产| 国产欧美久久一区二区| 国产叼嘿久久精品久久| 亚洲婷婷国产精品电影人久久| 色欲av伊人久久大香线蕉影院| 久久综合丝袜日本网| 伊人久久大香线蕉AV一区二区| 婷婷五月深深久久精品| 国产精品99久久精品爆乳| 国产精品久久久久久久人人看| 国产情侣久久久久aⅴ免费| 久久人人爽人人爽人人片AV麻豆| 久久这里只有精品首页| 97超级碰碰碰碰久久久久| 久久伊人五月丁香狠狠色| 国产综合成人久久大片91| 久久综合亚洲欧美成人| 色综合久久天天综线观看|