| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 300 人关注过本帖
标题:请高手指点下
只看楼主 加入收藏
lindanda
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-6-17
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
请高手指点下
#include <stdio.h>
#include <string.h>

unsigned int *copy(unsigned int *dst, unsigned int *src)
{
unsigned int size=*src, *p=dst+size;
*dst=size;
src+=size;
do *p--=*src--;
while (--size);
return dst;
}

int StrToNum(unsigned int *num, char *str)
{
char *tmp=str;
unsigned int a, i=0, j, k;
while (*tmp)
{
if (*tmp<'0' || *tmp>'9') return 0;
tmp++;
}
j=(unsigned int)(tmp-str);
*num=(j+3)>>2;
k=j>>2;
while (k)
{
a=(*--tmp&15);
a+=(*--tmp&15)*10;
a+=(*--tmp&15)*100;
a+=(*--tmp&15)*1000;
num[++i]=a;
k--;
}
if (j=j&3)
{
a=(*--tmp&15);
if (--j)
{
a+=(*--tmp&15)*10;
if (--j)
{
a+=(*--tmp&15)*100;
if (--j) a+=(*--tmp&15)*1000;
}
}
num[++i]=a;
}
return 1;
}

void NumToStr(char *str, unsigned int *num)
{
char *left;
unsigned int *tmp=*num+num, a=*tmp, k;
if (a<10)
{
*(left=str)=a%10|'0';
tmp--;
left+=5;
}
else if (a<100)
{
k=2;
left=str+2;
do *--left=a%10|'0';
while (a/=10, --k);
tmp--;
left+=6;
}
else if (a<1000)
{
k=3;
left=str+3;
do *--left=a%10|'0';
while (a/=10, --k);
tmp--;
left+=7;
}
else left=str+4;
while (tmp>num)
{
k=4;
a=*tmp--;
do *--left=a%10|'0';
while (a/=10, --k);
left+=8;
}
left[-4]='\0';
}

unsigned int *mul(unsigned int *s, unsigned int *a, unsigned int *b)
{
unsigned int asize=*a, bsize=*b, i=*a+*b, j;
*s=i;
while (i) s[i--]=0;
for (i=1; i<=asize; i++)
{
for (j=1; j<=bsize; j++)
{
s[i+j-1]+=a[i]*b[j];
if (s[i+j-1]>=10000)
{
s[i+j]+=s[i+j-1]/10000;
s[i+j-1]%=10000;
}
}
}
if (!s[*s]) --*s;
return s;
}

int GetPointPos(char *s)
{
char *PointPos=NULL, *t=s;
for (; *t; t++)
if (*t=='.') PointPos=t;
return (int)(t-PointPos)-1;
}


int DeleteZero(char *s, int size)
{
char *PointPos=NULL, *t=s;
int c;

for (t=s; *t; t++)
if (*t=='.') PointPos=t;
if (!PointPos) return 0;
for (t=s+size; --t>PointPos && *t=='0'; *t='\0');
if (*t!='.')
{
int ret=t-PointPos;
for (; PointPos<t; PointPos++) *PointPos=PointPos[1];
*t='\0';

if (*s=='0')
{
c=1;
while (*++t=='0')
c++;
for (t=s; *t=t[1]; t++);
}

return ret;
}
else *t='\0';
return 0;
}

void print(char *s, int size, int pos)
{
char t=s[size-pos];
int i;
s[size-pos]='\0';
if (pos<=size)
{
printf(s);
s[size-pos]=t;
putchar('.');
puts(s+size-pos);
}
else
{
//putchar('0');
putchar('.');
for (i=pos-size; i>0; i--)
putchar('0');
puts(s);
}
}

int main(void)
{
int flag;
char str[1500];
unsigned int i, n, a[30], s[120], t[120];
while (scanf("%s%d", str, &n)!=EOF)
{
if (i=DeleteZero(str, strlen(str))) i*=n, flag=1;
else flag=0;
StrToNum(a, str);
copy(s, a);
for (n--; n; n--)
{
copy(t, s);
mul(s, t, a);
}
NumToStr(str, s);
if (flag) print(str, strlen(str), i);
else puts(str);
}
return 0;
}
请问下,这个程序的结构式怎样的,能给个详细的解答吗?
搜索更多相关主题的帖子: 100 include return 
2010-06-17 15:33
笨到家啦
Rank: 2
等 级:论坛游民
帖 子:19
专家分:73
注 册:2010-6-7
收藏
得分:20 
用一个新手的眼光评论一下:
本人认为结构不怎么样
第一:整个程序没有注释,看起来费劲
第二:程序文本没用到缩进,看起来没有层次
至于内容么,本人还不够格评论。
2010-06-17 19:02
快速回复:请高手指点下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.068190 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved