主题:科学记数法
科学记数法
输入:用科学记数法表示的数据。即为符合C语言表示的科学记数法表示。
输出:该数据的双精度表示
说明: 1.输入数据的精度不高于小数点后50位。
2.输入数据时,在实数和幂之间有空格进行分隔,空格个数不定。
3.结果保留到小数点后8位,如不足8位用0补足,超过8位则截断,不进行四舍五入的处理。
编程思路:1.以字符方式一个一个读取输入数据,将尾数部分存入一个字符串,将指数部分转换为整数保存。尾数部分不要保存为实型数,因为尾数的小数部分可能很大,用实型数保存精度不够。
2.检查尾数字符串中是否有小数点,如果输入的尾数没有小数点,则在字符串中插入小数点。
3.根据给定的指数值移动小数点,可能有以下情况:
(1)指数为正,右移小数点;在移动过程中已到字符串尾,则需要补0。
(2)指数为负,左移小数点;在移动过程中已到字符串首,则要将字符串整体右移一位,在字符串首补0。
4.找到现在小数点的位置,再向后数8个字符,如果后面数字字符的个数不够8个则补0,小数点后8个数字字符的后面是字符串结束标志。
5.输出字符串。
我的答案:
运行勉强可以,不知哪里不妥
#include "stdio.h"
#include"string.h"
main()
{ char s[200],s1[200],s2[9]=".00000000",s3[80];int x,i,m,k=0,n,j;
gets(s);
for(i=0;s[i]!=' ';i++)
{ s1[i]=s[i];
if(s1[i]=='.')
{ k=1;
m=i;
}
}
s1[i]='\0';
n=i;
if(k==0)
{ s1[i]='.';
s1[i+1]='\0';
m=i;
}
for(;s[i]!='\0';i++)
{ if(s[i]>'0'&&s[i]<='9')
{ if(s[i-1]=='-') x=-s[i]+'0';
else if(s[i-1]==' ') x=s[i]-'0';
}
}
if(x>0)
{ m=m+x;
if(m>n-1)
{ i=0;
while(s1[i]=='.'||s1[i]=='0') i++;
for(j=0;i<n;i++,j++)
{ if(s1[i]!='.') s3[j]=s1[i];
else j--;
}
for(;i<m+1;j++,i++) s3[j]='0';
s3[j]='\0';
}
if(m<=n-1)
{ for(j=1,i=m+1;i<n&&j<9;i++,j++)
s2[j]=s1[i];
i=0;
while(s1[i]=='.'||s1[i]=='0') i++;
for(j=0;i<m+1;i++,j++)
{ if(s1[i]!='.') s3[j]=s1[i];
else j--;
}
}
strcat(s3,s2);
}
if(x<0)
{ if(m>=-x)
{ m=m+x;
for(i=m,j=1;i<n;i++,j++) s2[j]=s1[i];
for(i=0;i<m;i++) s3[i]=s1[i];
}
else { for(j=-x-m+1,i=0;i<n&&j<9;i++,j++)
{ if(s1[i]!='.') s2[j]=s1[i];
else j--;
}
strcpy(s3,"0");
}
strcat(s3,s2);
}
printf("%s",s3);
}
输入:用科学记数法表示的数据。即为符合C语言表示的科学记数法表示。
输出:该数据的双精度表示
说明: 1.输入数据的精度不高于小数点后50位。
2.输入数据时,在实数和幂之间有空格进行分隔,空格个数不定。
3.结果保留到小数点后8位,如不足8位用0补足,超过8位则截断,不进行四舍五入的处理。
编程思路:1.以字符方式一个一个读取输入数据,将尾数部分存入一个字符串,将指数部分转换为整数保存。尾数部分不要保存为实型数,因为尾数的小数部分可能很大,用实型数保存精度不够。
2.检查尾数字符串中是否有小数点,如果输入的尾数没有小数点,则在字符串中插入小数点。
3.根据给定的指数值移动小数点,可能有以下情况:
(1)指数为正,右移小数点;在移动过程中已到字符串尾,则需要补0。
(2)指数为负,左移小数点;在移动过程中已到字符串首,则要将字符串整体右移一位,在字符串首补0。
4.找到现在小数点的位置,再向后数8个字符,如果后面数字字符的个数不够8个则补0,小数点后8个数字字符的后面是字符串结束标志。
5.输出字符串。
我的答案:
运行勉强可以,不知哪里不妥
#include "stdio.h"
#include"string.h"
main()
{ char s[200],s1[200],s2[9]=".00000000",s3[80];int x,i,m,k=0,n,j;
gets(s);
for(i=0;s[i]!=' ';i++)
{ s1[i]=s[i];
if(s1[i]=='.')
{ k=1;
m=i;
}
}
s1[i]='\0';
n=i;
if(k==0)
{ s1[i]='.';
s1[i+1]='\0';
m=i;
}
for(;s[i]!='\0';i++)
{ if(s[i]>'0'&&s[i]<='9')
{ if(s[i-1]=='-') x=-s[i]+'0';
else if(s[i-1]==' ') x=s[i]-'0';
}
}
if(x>0)
{ m=m+x;
if(m>n-1)
{ i=0;
while(s1[i]=='.'||s1[i]=='0') i++;
for(j=0;i<n;i++,j++)
{ if(s1[i]!='.') s3[j]=s1[i];
else j--;
}
for(;i<m+1;j++,i++) s3[j]='0';
s3[j]='\0';
}
if(m<=n-1)
{ for(j=1,i=m+1;i<n&&j<9;i++,j++)
s2[j]=s1[i];
i=0;
while(s1[i]=='.'||s1[i]=='0') i++;
for(j=0;i<m+1;i++,j++)
{ if(s1[i]!='.') s3[j]=s1[i];
else j--;
}
}
strcat(s3,s2);
}
if(x<0)
{ if(m>=-x)
{ m=m+x;
for(i=m,j=1;i<n;i++,j++) s2[j]=s1[i];
for(i=0;i<m;i++) s3[i]=s1[i];
}
else { for(j=-x-m+1,i=0;i<n&&j<9;i++,j++)
{ if(s1[i]!='.') s2[j]=s1[i];
else j--;
}
strcpy(s3,"0");
}
strcat(s3,s2);
}
printf("%s",s3);
}