您的位置:首页 > 其它

NYOJ+细节题+注释的内容很多要注意

2015-08-07 02:01 302 查看
点击打开链接
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char Arr[110];
int main()
{
int flag=0,dot=0,left=0,len=0;
char *ch=0;
while(scanf("%s",Arr+1)!=EOF)//一定要带上EOF,否则会EOF
{
flag=0;//标签正数还是负数
Arr[0]='0';//防止不断进位溢出
if(Arr[1]=='-')
{
flag=1;
Arr[1]='0';
}
len=strlen(Arr);
if(ch=strchr(Arr,'.'))
{
dot=ch-Arr;
}
else
{
dot=len;
}
//处理小数点及进位
if(len-dot>3)
{
if(Arr[dot+3]>'4')
{
if(++Arr[dot+2]>'9')
{
Arr[dot+2]='0';
if(++Arr[dot+1]>'9')
{
Arr[dot+1]='0';
++Arr[dot-1];
}
}
int i=dot-1;
while(Arr[i] > '9') {
Arr[i] = '0';
i--;
++Arr[i];
}
}
Arr[dot+3]='\0';//结束
}
else if(len-dot==2)//小数点后只有一位
{
Arr[len]='0';
len++;
Arr[len]='\0';
}
else if(len-dot==1)//小数点后没有
{
Arr[len]='0';
len++;
Arr[len]='0';
len++;
Arr[len]='\0';
}
else if(len==dot)//没有小数点
{
Arr[len]='.';
len++;
Arr[len]='0';
len++;
Arr[len]='0';
len++;
Arr[len]='\0';
}
//除去左边的0
for(left=0;Arr[left]=='0';left++);
if(Arr[left]=='.') left--;
if(flag) printf("(");
while(left<dot)
{
printf("%c",Arr[left]);
left++;
if(left!=dot&&(dot-left)%3==0)//处理每三位有一个标记
{
printf(",");
}
}
printf("%s",Arr+dot);
if(flag) printf(")");
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: