• poj1001_Exponentiation


    这题真是超级大模拟。好繁琐,自己写的打数加法,乘法,写的比我大一时候写的要好很多,大一是借助C++里面的string来写的,这把只用了C,浇一次就ac了,挺开心的,不过写了2个小时啊。注意零的处理。大体思路就是先找出有多少位小数,要提前处理掉后面补充位置的零,然后把这个数转换成整数,做n次方,然后输出时候再查一下点的位置输出就好了。

      1 #include <stdio.h>
      2 #include <string.h>
      3 #define  mmax(a,b) (a)>(b):(a):(b)
      4 void bigadd(char a[],char b[],char res[]){
      5     int la=strlen(a),lb=strlen(b);
      6     int i,j,t,sign;
      7     char tmp[100000];
      8     char zero[10000]="0000000000000000000";
      9     if(la<lb){
     10         strcpy(tmp,a);
     11         strcpy(a,b);
     12         strcpy(b,tmp);
     13         la=strlen(a);
     14         lb=strlen(b);
     15     }
     16     for(i=la-1,j=lb-1;i>=0&&j>=0;--i,--j){
     17         a[i]=a[i]+b[j]-'0';
     18     }
     19     strcpy(zero+1,a);
     20     strcpy(a,zero);
     21     for(i=strlen(a)-1;i>0;--i){
     22         a[i-1]+=(a[i]-'0')/10;
     23         a[i]=(a[i]-'0')%10+'0';
     24     }
     25     for(i=0;i<strlen(a);++i){
     26         if(a[i]!='0') break;
     27     }
     28     if(i==strlen(a)) strcpy(res,"0");
     29     else strcpy(res,a+i);
     30     return ;
     31 }
     32 void bigmul_one(char a[],char b,char res[]){
     33     char zero[10000]="000000000000000000000000000000000000000";
     34     strcpy(zero+1,a);
     35     strcpy(a,zero);
     36     int ji[10000];
     37     int i,n=b-'0',l=strlen(a);
     38     for(i=0;i<l;++i){
     39         ji[i]=(a[i]-'0')*n;
     40     }
     41     ji[0]=0;
     42     for(i=l-1;i>0;--i){
     43         ji[i-1]=ji[i]/10+ji[i-1];
     44         ji[i]=ji[i]%10;
     45     }
     46     a[0]='0';
     47     for(i=l-1;i>=0;--i){
     48         a[i]='0'+ji[i];
     49     }
     50     for(i=0;i<l;++i){
     51         if(a[i]!='0') break;
     52     }
     53     if(i==l) strcpy(res,"0");
     54     else strcpy(res,a+i);
     55 }
     56 
     57 
     58 
     59 void bigmul(char a[],char b[],char res[]){
     60     int la,lb=strlen(b);
     61     char r[10000];
     62     char tmp[10000]="00000000000000000000000000";
     63     char zero[20000]="0";
     64     char t1[10000],t2[1000000];
     65     char aaa[10000];
     66     char haha;
     67     int i,j,t,cnt;
     68     strcpy(res,"0");
     69     for(j=0;j<lb;++j){
     70         haha=b[j];
     71         strcpy(t1,a);
     72         bigmul_one(t1,haha,t2);// t2 = res;
     73         for(i=j+1;i<lb;++i)    strcat(t2,"0");
     74         bigadd(res,t2,aaa);
     75         strcpy(res,aaa);
     76     }
     77 //    printf("res=%s
    ",res);
     78 }
     79 int main(){
     80     char a[10000],b[10000],res[10000];
     81     char tt[10000];
     82     int n,i,l;
     83     int cnt;
     84     int success;
     85     while(~scanf("%s%d",a,&n)){
     86         success=0;
     87         strcpy(res,"1");
     88 
     89 
     90         l=strlen(a);
     91 
     92         for(i=l-1;i>=0;--i){
     93             if(a[i]!='0') break;
     94         }
     95         if(i<=0) i=0;
     96         a[i+1]='';
     97 
     98         l=strlen(a);
     99 
    100 
    101 
    102         cnt=0;
    103         for(i=0;i<l;++i)
    104             if(a[i]=='.') break;
    105         strcpy(a+i,a+i+1);
    106         cnt=l-1-i;
    107         if(cnt<0) cnt=0;
    108         cnt=cnt*n;
    109         for(i=1;i<=n;++i){
    110             strcpy(b,a);
    111             bigmul(res,b,tt);
    112             strcpy(res,tt);
    113         }
    114         l=strlen(res);
    115         if(cnt>=l){
    116             printf(".");
    117             for(i=0;i<cnt-l;++i) printf("0");
    118             printf("%s
    ",res);
    119 
    120         }else{
    121             for(i=0;i<l;++i){
    122                 printf("%c",res[i]);
    123                 if(i+1==l-cnt&&i+1!=l) printf(".");
    124             }
    125             printf("
    ");
    126         }
    127 
    128     }
    129     return 0;
    130 }
  • 相关阅读:
    hdu 1518 square
    AWR报告的使用
    状态模式之观察者和状态模式
    Arduino笔记五三轴陀螺仪L3G4200D
    TCP IP 学习笔记 二 链路层
    机房收费系统数据库设计小结
    TMSSCRIPTER介绍
    TMSScripter语法
    listview的一些用法
    进制转换
  • 原文地址:https://www.cnblogs.com/symons1992/p/3511589.html
Copyright © 2020-2023  润新知