
一道程序设计题目,高手帮帮忙吧
DescriptionC语言中的10进制整数常量定义如下(不是严格的C定义,有简化):1)常量的开头可以有“+”或“-”号,也可以没有;2)至少有一位数字位,除非数字为0...
Description
C语言中的10进制整数常量定义如下(不是严格的C定义,有简化):
1) 常量的开头可以有“+”或“-”号,也可以没有;
2) 至少有一位数字位,除非数字为0,否则第一个数字必须为1到9的数字;
3) 如果有符号的话,符号与数字之间可以有0个或多个空格。
4) 常量的前后可能会有若干空格。
请写一个程序判断给定的整数是否符合这个定义。
输入
每个样例一行,每行表示一个整数,字符长度不超过20;
输出
每行输出一个样例的结果,如果符合定义输出“Yes”,否则输出“No”
Sample Input
-123
5F
Sample Output
Yes
No
+++++++++++++++++++++++++++++++++++++++++++++++++++++
下面是我写的
#include<iostream>
using namespace std;
int main()
{
char a[20];
while(1)
{
int di=0;
int len;
gets(a);
int i=0;//记录位置
len=strlen(a);//获取a的长度
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,i++,跳过空格
if(a[i]=='+'||a[i]=='-')
{
i++;
}//有符号,跳过符号。
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,跳过空格。
while(a[i]!=' '&&a[i]!='\0')
{
if(a[i]<'0'||a[i]>'9')
{
di++;
break;
}//排除非数字
if(a[i]=='0')
{
if(a[++i]==' ')
{
while(a[i]==' ')
i++;
}
break;
}//等于0的特殊情况;
i++;
}//检验数字部分,DI为标志位
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//i应该到达底部
if(di!=0)
{
cout<<"No"<<endl;
}
else
if(len==i)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
这个代码有问题,帮忙修改一下,就是对于XX00(后面有多个零的数字,X为1-9的数字),不能正确判断。 展开
C语言中的10进制整数常量定义如下(不是严格的C定义,有简化):
1) 常量的开头可以有“+”或“-”号,也可以没有;
2) 至少有一位数字位,除非数字为0,否则第一个数字必须为1到9的数字;
3) 如果有符号的话,符号与数字之间可以有0个或多个空格。
4) 常量的前后可能会有若干空格。
请写一个程序判断给定的整数是否符合这个定义。
输入
每个样例一行,每行表示一个整数,字符长度不超过20;
输出
每行输出一个样例的结果,如果符合定义输出“Yes”,否则输出“No”
Sample Input
-123
5F
Sample Output
Yes
No
+++++++++++++++++++++++++++++++++++++++++++++++++++++
下面是我写的
#include<iostream>
using namespace std;
int main()
{
char a[20];
while(1)
{
int di=0;
int len;
gets(a);
int i=0;//记录位置
len=strlen(a);//获取a的长度
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,i++,跳过空格
if(a[i]=='+'||a[i]=='-')
{
i++;
}//有符号,跳过符号。
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,跳过空格。
while(a[i]!=' '&&a[i]!='\0')
{
if(a[i]<'0'||a[i]>'9')
{
di++;
break;
}//排除非数字
if(a[i]=='0')
{
if(a[++i]==' ')
{
while(a[i]==' ')
i++;
}
break;
}//等于0的特殊情况;
i++;
}//检验数字部分,DI为标志位
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//i应该到达底部
if(di!=0)
{
cout<<"No"<<endl;
}
else
if(len==i)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
这个代码有问题,帮忙修改一下,就是对于XX00(后面有多个零的数字,X为1-9的数字),不能正确判断。 展开
2个回答
展开全部
#include<iostream>
using namespace std;
int main()
{
char a[20];
while(1)
{
int di=0;
int len;
gets(a);
int i=0;//记录位置
len=strlen(a);//获取a的长度
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,i++,跳过空格
if(a[i]=='+'||a[i]=='-')
{
i++;
}//有符号,跳过符号。
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,跳过空格。
bool leadingzero = true;
int legalzero = 0;
while(a[i]!=' '&&a[i]!='\0')
{
if(a[i]<'0'||a[i]>'9')
{
di++;
break;
}//排除非数字
if(a[i]=='0'&&leadingzero)
{
legalzero = 1;
}//等于0的特殊情况;
else if(legalzero == 1)
{
legalzero = 2;
}
leadingzero = false;
i++;
}//检验数字部分,DI为标志位
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//i应该到达底部
if(di!=0)
{
cout<<"No"<<endl;
}
else if(legalzero==2)
cout <<"No"<<endl;
else if(len==i)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
using namespace std;
int main()
{
char a[20];
while(1)
{
int di=0;
int len;
gets(a);
int i=0;//记录位置
len=strlen(a);//获取a的长度
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,i++,跳过空格
if(a[i]=='+'||a[i]=='-')
{
i++;
}//有符号,跳过符号。
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,跳过空格。
bool leadingzero = true;
int legalzero = 0;
while(a[i]!=' '&&a[i]!='\0')
{
if(a[i]<'0'||a[i]>'9')
{
di++;
break;
}//排除非数字
if(a[i]=='0'&&leadingzero)
{
legalzero = 1;
}//等于0的特殊情况;
else if(legalzero == 1)
{
legalzero = 2;
}
leadingzero = false;
i++;
}//检验数字部分,DI为标志位
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//i应该到达底部
if(di!=0)
{
cout<<"No"<<endl;
}
else if(legalzero==2)
cout <<"No"<<endl;
else if(len==i)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
追问
不能AC ,
提示答案错误
追答
#include
using namespace std;
int main()
{
char a[20];
while(1)
{
int di=0;
int len;
gets(a);
int i=0;//记录位置
len=strlen(a);//获取a的长度
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,i++,跳过空格
if(a[i]=='+'||a[i]=='-')
{
i++;
}//有符号,跳过符号。
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,跳过空格。
bool leadingzero = true;
int legalzero = 0;
while(a[i]!=' '&&a[i]!='\0')
{
if(a[i]'9')
{
di++;
break;
}//排除非数字
if(a[i]=='0'&&leadingzero)
{
legalzero = 1;
}//等于0的特殊情况;
else if(legalzero == 1)
{
legalzero = 2;
}
leadingzero = false;
i++;
}//检验数字部分,DI为标志位
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//i应该到达底部
if(di!=0)
{
cout<<"No"<<endl;
}
else if(leadingzero)
cout << "No" << endl;
else if(legalzero==2)
cout <<"No"<<endl;
else if(len==i)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
展开全部
#include<iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main()
{
char a[20];
while(1)
{
int di=0;
int len;
int bit = -1;
gets(a);
int i=0;//记录位置
len=strlen(a);//获取a的长度
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,i++,跳过空格
if(a[i]=='+'||a[i]=='-')
{
i++;
}//有符号,跳过符号。
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,跳过空格。
while(a[i]!=' '&&a[i]!='\0')
{
if(a[i]<'0'||a[i]>'9')
{
di++;
break;
}//排除非数字
if(a[i]=='0' && bit == -1)
{
if(a[++i]==' ')
{
while(a[i]==' ')
i++;
}
break;
}//等于0的特殊情况;
else
{
if (bit == -1)
bit = i;
}
i++;
}//检验数字部分,DI为标志位
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//i应该到达底部
if(di!=0)
{
cout<<"No"<<endl;
continue;
}
else
if(len==i)
cout<<"Yes"<<endl;
else
{
if (bit < i)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}
return 0;
}
-------------------以下是测试结果----------------------------------
2000
Yes
2000 0
No
20000
Yes
- 20000
Yes
- 2000 2
No
2000 b
No
- 2000 b
No
2000b
No
2000
Yes
#include <stdio.h>
#include <string.h>
using namespace std;
int main()
{
char a[20];
while(1)
{
int di=0;
int len;
int bit = -1;
gets(a);
int i=0;//记录位置
len=strlen(a);//获取a的长度
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,i++,跳过空格
if(a[i]=='+'||a[i]=='-')
{
i++;
}//有符号,跳过符号。
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//有空格,跳过空格。
while(a[i]!=' '&&a[i]!='\0')
{
if(a[i]<'0'||a[i]>'9')
{
di++;
break;
}//排除非数字
if(a[i]=='0' && bit == -1)
{
if(a[++i]==' ')
{
while(a[i]==' ')
i++;
}
break;
}//等于0的特殊情况;
else
{
if (bit == -1)
bit = i;
}
i++;
}//检验数字部分,DI为标志位
if(a[i]==' ')
{
while(a[i]==' ')
i++;
}//i应该到达底部
if(di!=0)
{
cout<<"No"<<endl;
continue;
}
else
if(len==i)
cout<<"Yes"<<endl;
else
{
if (bit < i)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}
return 0;
}
-------------------以下是测试结果----------------------------------
2000
Yes
2000 0
No
20000
Yes
- 20000
Yes
- 2000 2
No
2000 b
No
- 2000 b
No
2000b
No
2000
Yes
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询