poj 1001

来源:互联网 发布:seo常用标签 编辑:程序博客网 时间:2024/06/05 00:22
没有做最后的整理了、、、、
#include "stdio.h"#include "string.h"struct Bignum{int s[3000];  //数组int len;  //长度int point;    //小数点位数Bignum(){len = 1;point = 0;memset(s, 0, sizeof(s));}Bignum operator = (const char* num){len = strlen(num);int flag = 0;int j;point = 0;for(int i=0,j=len-1; j>=0; j--){if(num[j] !=  '.'){s[i++] = num[j]-'0';if(flag==0){point++;}} else {flag = 1;}}if(flag){len--;}return *this;}Bignum operator * (const Bignum& b) const{Bignum c;c.point = point + b.point;int i,j;for(i=0; i<len; i++){for(j=0; j<b.len; j++){c.s[i+j] = c.s[i+j] + s[i]*b.s[j];}}int g;for(c.len=0,g=0; g!=0 || c.len<(len+b.len); c.len++){c.s[c.len] = c.s[c.len] + g;g = c.s[c.len]/10;c.s[c.len] = c.s[c.len]%10;}c.clear();return c;}void clear(){/*** 把数字前面和后面的0去掉*///printf("(1)len:%d\n(1)point:%d\n", len, point);int old_len=len, old_point=point, i;len = 0;//去掉小数点后面的零for(i=0; i<old_len && i<old_point; i++){if(s[i]!=0) {break;}point--;} //for ifor(; i<old_len; i++) {s[len++] = s[i];}  //for//printf("len:%d\npoint:%d\n", len, point);//去掉整数前面零for(; len>0; len--){if(s[len-1]!=0){break;}} //for}void print(){clear();if(point>=len){printf(".");while(point>len) {printf("0");point--;}} //iffor(int i=len-1; i>=0; i--){printf("%d", s[i]);if(i==point && i!=0){printf(".");}} //forprintf("\n");}};int main(){freopen("D:\\in.txt", "r", stdin);char a[100];int b;while(scanf("%s%d", a, &b)==2) {//printf("b:%d\n", b);Bignum c,d;c = a;d = a;c.clear();d.clear();//d.print();for(int i=1; i<b; i++){d = d * c;}d.print();}return 0;}



思路:

1、把数字存储在数字数组中。

2、主要是在小数点的处理上。

原创粉丝点击