-
/*
要求输入一个小于
999999999<
/p>
的阿拉伯数字(小数包含在内)
,输出如下英语表达式
输入:
12345678.90123
输出:
twelve million three
hundred and forty-five thousand six hundred and
seventy-eight point
nine zero one two
three.
要求有容错功能。
(
例
12.123.1234
ab123
*/
#include
#include
void
mx(int
num);
//
定义了一个子程序
mx
,能够翻译
0~999
的整数
int main()
{
while(1)
//
无限循环,
方
便多次输入数据
{
char str[][10]={
char c[80];
int
m,n=0,Neg=0,sum=0;
p>
//Neg
用来标记是否为负
数
,sum
用来判断是否等于
999999999
int
i,j=0;
//i
,
j
分别用来
标记
'0'
< br>和小数点
'.'
的位置
int
sum1=0,sum2=0,sum3=0;
//
将整数部分,以
3
位为一组,分
别赋值给
su
m1,sum2,sum3
int
point=0,error=0;
//p
oint
标记小数点个数,
error
标记错误
printf(
请输入数字
:
scanf(
for(i=0;c[i]!='0';i++)
{
if(c[0]=='-')
//<
/p>
如果数组第
0
位
是负号
'-'
{
for(m=0;c[m]!='0';m++)
c[m]=c[m+1];
//<
/p>
数组每位向前移动
一位
Neg=1;
p>
//Neg
赋值为
1
,
说明是负数。
}
if(c[i]=='.')
j=i,point++;
//<
/p>
标记小数点位置,
同时
point+1
else if(c[i]<'0'||c[i]>'9')
error=1;
//error
赋值
1
,
说
明存在除
0~9
以外的字符
}
if(j==0)
j=i;
p>
//
此循环结束,
j
指向小数点,
i
指向最后一位的后一位即
'0'
for(m=j-1;m>=0&&m>=j-9;m--)
//
从个位开始,依次往左求和
{
sum+=(int)((c[m]-'0')*pow(10,n));
n++;
}
n=0;
//
循环结束,
n
赋值为
0
for(m=j-10;m>=0;m--)
n+=c[m]-'0';
//
判
断<
/p>
输
入数据的正误
if((sum==999999999&&Neg==0)||n!=0)
{printf(
输入数字太大
n
if(Neg==1&&point<2&&error==0)
printf(
if(point>1||error==1)
p>
printf(
输入数字有
误
n
else
{
if(point==1)
for(m=i-1;c[m]=='0';m--)
i--;
//
用于
剔除
32.2300000
后面多
余的
0
for(m=j-1;m>j-4;m--)
//
计算
sum1,sum2,sum3
if(m>=0){sum1+=
(int)((c[m]-'0')*pow(10,n));n++;}n=0;
for(m=j-4;m>j-7;m--)
if(
m>=0){sum2+=(int)((c[m]-'0')*pow(10,n));n++;}n=0;
for(m=j-7;m>j-10;m--)
if(
m>=0){sum3+=(int)((c[m]-'0')*pow(10,n));n++;}n=0;
if(sum3!=0)
//
整数部分输出
{
mx(sum3);printf(
if(sum2!=0)
{
mx(sum2);printf(
}
mx(sum1);
}
else if(sum2!=0)
{
-
-
-
-
-
-
-
-
-
上一篇:小学六年级英语小短文(三篇)
下一篇:三年级英语小短文30字